
lina
Tengo el siguiente código:
int **ptr = (int **)malloc(sizeof(int*)*N);
for(int i=0;i<N;i++)
ptr[i]=(int*)malloc(sizeof(int)*N));
como puedo liberar ptr
utilizando free
? ¿Debería pasar por encima? ptr
y gratis ptr[i]
o debería simplemente hacer
free(ptr)
y ptr
será liberado?
Justo lo contrario de asignación:
for(int i = 0; i < N; i++)
free(ptr[i]);
free(ptr);

James Bedford
Tendrás que hacer un bucle ptr[i]
liberando a cada uno int*
que atraviesas, como sugieres primero. Por ejemplo:
for (int i = 0; i < N; i++)
{
int* currentIntPtr = ptr[i];
free(currentIntPtr);
}
Sí, debe recorrer ptr
y libre cada uno ptr[i]
. Para evitar pérdidas de memoria, la regla general es esta: para cada malloc()
debe haber exactamente uno correspondiente free()
.
Sencillo
while (N) free(ptr[--N]);
free(ptr);
Guapo
#define FALSE 0
#define TRUE 1
typedef int BOOL;
void freev(void **ptr, int len, BOOL free_seg) {
if (len < 0) while (*ptr) {free(*ptr); *ptr++ = NULL;}
else while (len) {free(ptr[len]); ptr[len--] = NULL;}
if (free_seg) free(ptr);
}
freev(ptr, N, TRUE); /* if known length */
freev(ptr, -1, TRUE); /* if NULL-terminated */
freev(ptr, -1, FALSE); /* to keep array */
Patricio
Fácil funciones:
Me resulta difícil hacer una programación seria en C sin GLib. Introduce cosas como cuerdas dinámicas y pone cimientos por programación funcional. Realmente debería ser parte de la biblioteca de tiempo de ejecución estándar de C. Le daría a C un soplo de aire fresco. Volvería a convertir a C en un lenguaje razonable y competitivo. para el año 2019. Pero debido a que no lo es, agregará 1 MB a su aplicación (ya sea en tamaño DLL o en tamaño ejecutable). También la distribución de Windows es mantenida por sádicos.
for(int i=0;i<N;i++) free(ptr[i]);
free(ptr);
no está comprobando si no se ha podido asignar malloc. Siempre debes revisar.

Asher Abecassis
void freeMatrix(int **matrix ,int row)
{
for(int i=0;i<row;i++)
{
free(matrix[i]);
}
free(matrix);
}
No se trata de gratis, pero quería hablar de malloc. Como ha señalado Srikanth, es bueno si verifica la falla de malloc. Consulte este material: stackoverflow.com/questions/27451220/…
– usuario10719814
9 sep 2019 a las 23:47