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
}
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:También es necesario liberar la memoria asignada a
steps
: