C/Visual C - Delete, New y C++

 
Vista:

Delete, New y C++

Publicado por Angel Romero (2 intervenciones) el 22/03/2004 17:53:26
Hola buenas!! os cuento mi problema...creé una clase llamada E3D_Cara que contiene 3 vertices de un poligono (x,y,z) y 3 vertices de texturado del mismo poligono (u,v) . Pues bien, necesitaba para OpenGL crear un Array con solo los vertices y otro para solo las texturas ( o sea,,,debia extraer los vertices de la clase E3D_Caras. Cuando llamo a la funcion que debe crear el nuevo array, todo funciona muy bien, pero a la hora de cerrar el programa, me da error. Creo que es por no liberar bien la memoria...se que debo usar Delete...pero donde¿¿ yo la he colocado cuando se destruye la clase...pero no funciona, sigue dando error y no se porq es. Alguien me puede ayudar???
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Delete, New y C++

Publicado por chuidiang (677 intervenciones) el 23/03/2004 09:19:28
Cuando instancias algo con new, debes liberarlo con delete y solo en ese caso. Por ello

- Si el constructor de tu clase hace new de algunas cosas, debes hacer delete de esas cosas en el destructor de la misma.

- Si instancias tu clase con variable = new E3D_Cara() en algun sitio, debes hacer cuando no la necesites el delete correspondiente delete variable;

- Si dentro de tu clase haces new de los vertices (quizas no sea el caso) y los devuelves a alguien (a openGL por ejemplo), no puedes hacer delete de esos vertices hasta que estes seguro que openGL no los va a usar.

No se si estos consejos se aplican a tu caso o no. Si quieres puedes ampliar información sobre este tipo de problemas en www.geocities.com/chuidiang en el apartado de consejos sobre punteros en C++.

Se bueno.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Delete, New y C++

Publicado por JoseGR (41 intervenciones) el 23/03/2004 10:45:21
Hola, si reservas memoria con el operador new para un array debes liberarlo despues con delete [ ], ejemplo:

CString *arStr = new CString[counter];
...
delete [ ]arStr;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar