es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Liberando una matriz 2D asignada dinámicamente solo liberando las primeras dos filas.

Tengo un programa en el que creo una matriz dinámica de 2 dimensiones con la siguiente función.

“`
char *get2dArray(int n, int m)
{
{
char **p = (char **)calloc(sizeof(char *), n);

for (int i = 0; i < n; i++)
{
p[i] = (char *)calloc(m, sizeof(p[0]));
}

return p;

}
}

La función se llena con algunos datos después de su creación. Básicamente, contiene una oración en cada 2d_arr[i].

void getSentencesWithNumber(int sentence_total, char **sentences_seperated_2d)
{
printf(“Ihre Wahl: Nr. | Satz\n—–+—————————————-\n”);
for (int i = 0; i < sentence_total; i++)
{
printf(” %d | %s\n”, i + 1, sentences_seperated_2d[i]);
}
}

Imprimo las oraciones con la función anterior.

Ihre Wahl: Nr. | Satz
—–+—————————————-
1 | Un párrafo es una serie de oraciones relacionadas que desarrollan una idea central, llamada tema.
2 | Intenta pensar en los párrafos en términos de unidad temática: un párrafo es una oración o un grupo de oraciones que respaldan una idea central y unificada.
3 | Los párrafos agregan una idea a la vez a tu argumento más amplio.

arriba es un ejemplo de cómo se vería una impresión.
Quería eliminar una oración de la matriz, sin embargo, no estaba seguro de cómo funcionaría, así que pensé que tal vez liberar la matriz 2D actual y crear una nueva con una oración menos funcionaría. Sin embargo, si uso la función free y vuelvo a imprimir mi matriz, se vería algo así:

Ihre Wahl: Nr. | Satz
—–+—————————————-
1 | (nulo)
2 |
3 | Los párrafos agregan una idea a la vez a tu argumento más amplio.

Arriba, la matriz se liberó justo después de llenarla. Y luego se llamó a la función de impresión desde otra función. La salida es la misma si hago:

for (int i = 0; i < sentence_total; i++)
{
free(sentences_seperated_2d[i]);
}
free(sentences_seperated_2d);

arriba es la liberación que utilicé.

¿Alguna idea de cómo aquí solo se borran las dos primeras oraciones y no las demás? Para mí no tiene sentido. Además, incluso si hay más oraciones, solo las dos primeras quedan vacías.

Gracias, espero haber dejado claro mi problema.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    A partir del código y la salida proporcionados, parece haber un problema con la forma en que se libera la memoria. El código para liberar la memoria parece estar correcto, por lo que el problema podría estar en cómo se llama o se utiliza.

    Un posible problema podría ser que la función getSentencesWithNumber() se llame después de que se haya liberado la memoria, lo que puede llevar a un comportamiento indefinido. Es importante asegurarse de que la memoria no se esté accediendo o utilizando después de haber sido liberada.

    Otro posible problema podría estar en la indexación del array. Si la indexación no es correcta, podría liberar la ubicación de memoria incorrecta o acceder a memoria que ya ha sido liberada.

    Podría ser útil agregar algunas instrucciones de impresión para rastrear la ejecución del código y ver dónde podría estar ocurriendo el problema. Además, utilizar una herramienta como Valgrind puede ayudar a identificar errores y fugas de memoria.

Comments are closed.