 |
Club Builder Foro de C++Builder en español
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
Jumanor Lt


Registrado: 28 Feb 2003Mensajes: 91Ubicación: tacna-Peru
|
Publicado: Mie 20 Ago, 2003 12:09 am Asunto: Asignacion dinamica |
|
|
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  |
|
| Volver arriba |
|
 |
ikis Master


Registrado: 28 Dic 2002Mensajes: 703Ubicación: Madrid, España
|
Publicado: Mie 20 Ago, 2003 12:41 am Asunto: memoria |
|
|
| 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 |
|
 |
_Viktor Master


Registrado: 20 Jul 2003Mensajes: 463Ubicación: Santiago, Los Angeles - Chile
|
Publicado: Mie 20 Ago, 2003 2:16 am Asunto: |
|
|
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 |
|
 |
Alejandro Invitado
|
Publicado: Mie 20 Ago, 2003 2:55 am Asunto: delete[] |
|
|
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 |
|
 |
Jumanor Lt


Registrado: 28 Feb 2003Mensajes: 91Ubicación: tacna-Peru
|
Publicado: Vie 22 Ago, 2003 11:04 pm Asunto: gracias |
|
|
| gracias por todos |
|
| Volver arriba |
|
 |
|
|
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
|
© 2002–2026 Club Builder · Funciona con phpBB.
|