Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

 
 
Herramientas Buscar en Tema Desplegado
  #4  
Antiguo 16-12-2014
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.025
Poder: 27
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
Estás mezclando C y C++. Recuerda que son lenguajes diferentes.

Lo siguiente:
Código:
//Obtengo memoria para los elementos necesarios
rutas = new(nothrow) AnsiString*[nSeleccionadas];
Sí, estás obteniendo "memoria para los elementos necesarios", pero estás creando nSeleccionadas referencias a objetos de clase AnsiString, que se almacenan en una lista (array) referenciada por el puntero rutas. Ojo, porque no estás creando ningún objeto.

Por eso lo siguiente:
Código:
//Limpio todo lo necesario
memset(rutas, 0, sizeof(rutas));
no limpia nada. Lo que hace es asignar el valor 0 a los primeras 8 octetos (asumiendo 64bit) de la lista referenciada por rutas, independientemente del tamaño de la misma.

memset no sabe de objetos, sólo sabe de posiciones de memoria. Y sizeof devuelve el tamaño del tipo, no el número de elementos de una lista (salvo que lo hayan cambiado en la definición del lenguaje C++ 99 o posterior, que si es así me parece una cagada monumental...). Estas dos funciones son funciones C, no C++.

Para limpiar los objetos has de usar un bucle y limpiar cada objeto, uno a uno, de la forma apropiada, similar a tu código de liberación de memoria:
Código:
int Ndx;

  for (Ndx = 0; Ndx < nSeleccionadas; Ndx++)
    *(rutas[Ndx]) = ""; // La clase AnsiString sobrecarga el operador "=".
Nota: Hace años que no programo C++, y de hecho me mosquea lo de "new(nothrow)", pero creo que no he cometido ningún error. Aun así, si alguien lo tiene más fresco, que lo diga.

Última edición por Ñuño Martínez fecha: 16-12-2014 a las 15:40:25. Razón: Parece que tengo el C++ más oxidado de lo que pensaba.
Responder Con Cita
 



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Duda con inicialización de variables lucasarts_18 Varios 13 04-11-2010 17:12:56
Duda sobre destrucción de objetos compuestos por otros objetos noob OOP 11 16-02-2009 00:28:33
Recorrido por objetos en forma de array. vpepen Varios 7 23-01-2009 13:11:12
Array de objetos propios? gandalf_uy OOP 6 26-02-2008 04:19:48
Array de OBJETOS en Delphi 7 animal OOP 5 08-07-2005 11:33:21


La franja horaria es GMT +2. Ahora son las 09:47:10.


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