Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Asignacion dinamica

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Asignacion dinamica Responder citando

Hola a todos:
Realmente no se lo que ocurre, si libero memoria a un puntero, que no le asigne memoria dinamica.

int *p;
delete []p;// o delete p;

ocurre algun error????????

gracias por su ayuda Crying or Very sad
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email Visitar sitio web del autor MSN Messenger
Mensaje    Asunto: memoria Responder citando

Hasta donde yo se, debes realizar primero un new del punterio para luego hacer un delete, y si es posible, asignarle finalmente null.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor
Mensaje    Asunto: Responder citando

Hola, Ikis tiene razon, si hicieras algo como esto:
Código:

int *Numero = new int[20];

for(int i=0;i<20;i++)
   Numero[i]=i;

delete Numero;



si necesitas liberar memoria, pero si simplemente usas el puntero sin haber usado el operador new, no tienes necesidad de lliberar memoria
que no ha sido reservada...
Suerte...
_________________
"Ser inteligente no es ser mas, solo equivocarse menos y no usar Visual Basic"
Atte.
Victor Yañez

Apoyen el Proyecto OpenSource del Club Builder. Ya tenemos componentes Listos!!!
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email Yahoo Messenger MSN Messenger
Mensaje    Asunto: delete[] Responder citando

Hola Jumanor;

Sí, si aplicas el operador delete o el delete[] a un puntero que fue declarado, pero que no tiene asignada ninguna dirección de memoria conocida, es muy probable que ocurra un error, ya que estarías liberando memoria que no te pertenece (aunque si la dirección de p está libre, no pasaría nada, pero con eso no se juega :)

En principio, "int* p" sólo dice que p es un puntero a entero, y nada más, fata asigarlo a una dirección; para eso es que se usa el operador "new", por ejemplo.

Entonces, declarado y asignado a una dirección válida sería:

int* p = new int; // p apunta a una dirección válida

int* p = new int(256); // creado y guardando el entero 256 (inicializado)

int* p = new int[100]; // 100 punteros a int

para liberar memoria en cada caso, sería:

delete p; //,

delete p; // y

delete[] p; // respectivamente.

si fue creado con new, se libera con delete;
si se usó new[], delete[]

El problema con los punteros que apuntan a vaya a saber qué, es que se les dá por funcionar sólo cuando uno los está viendo, pero muestran su verdadera naturaleza impúdicamente frente a extraños.

Jé.
Volver arriba
Mensaje    Asunto: gracias Responder citando

gracias por todos
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email Visitar sitio web del autor MSN Messenger
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.