Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Go Back   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Register FAQ Members List Calendar Guía de estilo Today's Posts

Reply
 
Thread Tools Search this Thread Display Modes
  #1  
Old 23/11/2016
Snaked Snaked is offline
Baneado
NULL
 
Join Date: Sep 2016
Posts: 102
Poder: 0
Snaked Va por buen camino
quizas sea que tienes que poner:

delete Form1->cEntornoAnt

o donde este situado el identificador

creo que el delete ese del Finally es redundante....pues los objetos locales de metodos y funciones se borran automaticamente por el compilador al salir de los mismos

Last edited by Snaked : 23/11/2016 at 17:02.
Reply With Quote
  #2  
Old 23/11/2016
Angel.Matilla's Avatar
Angel.Matilla Angel.Matilla is offline
Miembro
 
Join Date: Jan 2007
Location: Toledo - España
Posts: 1,418
Poder: 21
Angel.Matilla Va por buen camino
Gracias por las respuestas. Ya encontré el error y es una tontería : Simplemente era sacar las declaraciones del try.
Code:
char cEntornoAnt[256] = "\0";
TIniFile *fIni;
     
try
{
     try
     {
          [...]
     }
     catch(...)
     {
     }
}
Reply With Quote
  #3  
Old 24/11/2016
Snaked Snaked is offline
Baneado
NULL
 
Join Date: Sep 2016
Posts: 102
Poder: 0
Snaked Va por buen camino
ah claro..... yo no cai en eso pero tampoco es que sea experto en try catch....creo que solo lo habre hecho 1 o 2 veces y la primera fue en el curso de programacion de C++ builder de auto-enseñanza que hice.... jejeejej

lo que si creo que me apetece es volver a repasarme el libro de programacion en C y ahondar un poco en otro de programacion C++ y ver si ahora, con un poco mas de experiencias a las espaldas lo cojo con soltura y vicio.
Reply With Quote
  #4  
Old 30/11/2016
aguml's Avatar
aguml aguml is offline
Miembro
 
Join Date: May 2013
Posts: 885
Poder: 14
aguml Va por buen camino
__finally no es C++ estándar y solo funciona con los compiladores de Microsoft, por lo tanto en el c++builder no te va a funcionar. Además en tu código no lo necesitabas para nada y solo necesitabas quitarlo sin más.
Por otro lado ese código no está bien ya que si falla al obtener memoria, en tu código si o si intentará liberarla y eso es peligroso. Además cEntornoAnt es creado de forma estática e intentas liberar su memoria con delete, delete se usa para liberar la memoria obtenida con new. Así deberías ponerlo:
PHP Code:
char cEntornoAnt[256] = '\0';
try
{
     
TIniFile *fIni = new TIniFile(cEntornoAnt);
     try
     {
          
GetPrivateProfileString("DATOS""Entorno""C:\\DatAfi21\\Gia.ini"cEntornoAntsizeof(cEntornoAnt), cInicio.c_str());

          if (!
FileExists(cEntornoAnt))
               throw 
Exception("No se encuentra el fichero de configuracion antiguo.\nAvise al programador.");

          [
Resto del código]
     }
     catch(
Exception &exception)
     {
          
ShowMessage(exception.Message);
     }
     
delete fIni;

Reply With Quote
  #5  
Old 30/11/2016
mamcx's Avatar
mamcx mamcx is offline
Moderador
 
Join Date: Sep 2004
Location: Medellín - Colombia
Posts: 3,941
Poder: 27
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
Ten en cuenta que C++ usa RAII:

https://es.wikipedia.org/wiki/RAII
Quote:
La técnica RAII es vital al escribir código C++ seguro frente a excepciones
Supongo que C++ builder lo permite...
__________________
El malabarista.
Reply With Quote
  #6  
Old 30/11/2016
j0seant j0seant is offline
Miembro
 
Join Date: Feb 2006
Posts: 38
Poder: 0
j0seant Va por buen camino
Quote:
Originally Posted by aguml View Post
__finally no es C++ estándar y solo funciona con los compiladores de Microsoft, por lo tanto en el c++builder no te va a funcionar.
__finally existe en C++Builder desde la versión 3 o 4, y funciona (aunque sea una extensión de Microsoft). No entro en si es más o menos recomendable usarlo, evidentemente siempre que se pueda usar RAII mucho mejor.

Muy útil también para estos casos "unique_ptr" o "auto_ptr".

Last edited by j0seant : 30/11/2016 at 17:33.
Reply With Quote
  #7  
Old 30/11/2016
exmachina exmachina is offline
Miembro
NULL
 
Join Date: Sep 2016
Location: 127.0.0.1
Posts: 30
Poder: 0
exmachina Va por buen camino
Quote:
Originally Posted by j0seant View Post
__finally existe en C++Builder desde la versión 3 o 4, y funciona (aunque sea una extensión de Microsoft). No entro en si es más o menos recomendable usarlo, evidentemente siempre que se pueda usar RAII mucho mejor.

Muy útil también para estos casos "unique_ptr" o "auto_ptr".
Que yo sepa el uso de los bloques try...catch..finally tienen un coste, tanto en memoria como en eficiencia, sobre todo cuando no se intercepta unas excepciones concretas-> es decir cuando se interceptan todas las excepciones y se debe desenrollar toda la pila. En internet pueden encontrarse multitud de documentos que explican esto (basicamente quiere decir que es muy comodo usar las excepciones pero repercuten en el rendimiento)

Sobre __try, __except y __finally (SEH) y cosas similares (controlar errores y excepciones en C++) en Windows :
https://msdn.microsoft.com/en-us/library/hh279678.aspx
https://msdn.microsoft.com/en-us/library/swezty51.aspx

Y por cierto, aunque no no soy programador ya se que existen documentos similares a este, pero hacen referencia a C++/CLI y aun asi sigue existiendo el mismo problema, aunque no se mencione.

Un saludo
Reply With Quote
Reply



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump

Similar Threads
Thread Thread Starter Forum Replies Last Post
Try/except/finally jsc OOP 14 13/09/2011 19:06
Capturar Errores con Try, Finally, End GerTorresM OOP 1 23/04/2011 23:16
Try Except --finally-- Caral Varios 13 02/10/2006 22:12
Errorsys, o gestión de errores dec Trucos 0 01/07/2006 12:22
Gestión Errores en DBEXPRESS asirvent Conexión con bases de datos 0 21/11/2003 12:39


All times are GMT +2. The time now is 02:17.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi