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.

No es posible liberar todas las llamadas a malloc y realloc en el programa.

En mi programa tengo algunas llamadas a malloc y realloc pero por alguna razón, cuando llamo a free en aquellas a las que llamé, todavía señala que tienen fugas directas.

El nombre de la variable fue declarado anteriormente como char **names y no se inicializó hasta abajo. Realicé realloc y asignación de nombres bajo diferentes parámetros, por lo que no estoy seguro de cómo liberar eso al final. ¿Solo tendría que iterar a través de toda la matriz de nombres una vez? ¿O debo hacerlo varias veces?

names = malloc(size * sizeof(char *)); //MALLOC
names[0] = malloc(2 * sizeof(char)); //MALLOC
names[0] = “0\0”;
names[1] = malloc(2 * sizeof(char)); //MALLOC
names[1] = “1\0”;

int i;
for (i = 0; i < icount; i++) {
names[i + 2] = malloc(17 * sizeof(char)); //MALLOC
fscanf(file, “%*[: ]%16s”, names[i + 2]);
}

names = realloc(names, size * sizeof(char )); //REALLOC
for (i = 0; i < ocount; i++) {
names[i + icount + 2] = malloc(17 * sizeof(char)); //MALLOC
fscanf(file, “%
[: ]%16s”, names[i + icount + 2]);
}

for (i = 0; i < numOutputs; i++) {
fscanf(file, “%*[: ]%16s”, v);
int idx = indexOf(size, names, v);
if (idx == -1) {
size++;
tcount++;
names = realloc(names, size * sizeof(char *)); //REALLOC
names[size – 1] = malloc(17 * sizeof(char)); //MALLOC
strcpy(names[size – 1], v);
step.outputs[i] = size – 1;
}

    if (!steps) {
    steps = malloc(sizeof(struct directive));    //MALLOC
} else {
    steps = realloc(steps, scount * sizeof(struct directive));     //REALLOC
}
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para liberar la memoria asignada a names, es necesario iterar a través de todo el arreglo y liberar cada elemento. Puede hacer esto con un ciclo:

    for (int i = 0; i < size; i++) {
        free(names[i]);
    }
    free(names);
    

    También es necesario liberar la memoria asignada a steps:

    free(steps);
    

Comments are closed.