У меня есть следующая структура и его инициализация в файле C:
struct Lattice {
int length;
int** latt;
};
struct Lattice* Create(int size){
struct Lattice latt;
int i,j,k,l;
latt.length = size;
latt.latt = malloc(sizeof(int*) * latt.length);
for(i=0; i<latt.length; i++){
latt.latt[i] = malloc(sizeof(int) * latt.length);
}
for(j=0; j<latt.length; j++){
for(k=0; k<latt.length; k++){
latt.latt[j][k] = 0;
}
}
struct Lattice* lattp = &latt;
return lattp;
И у меня также есть функция освобождения памяти:
void Destroy(struct Lattice* lattp){
int l;
for (l=0; l<(lattp->length); l++){
free(lattp->latt[l]);
}
free(lattp->latt);
}
Но всякий раз, когда я запускаю код:
int main(){
struct Lattice* lattp = Create(5);
Destroy(lattp);
return 0;
}
Я получаю утечку памяти (согласно Valgrind это определенно потеряно 40 байтов и косвенно потеряно еще 80, если это имеет какое-то значение).
Но если у меня есть идентичный код, за исключением того, что я записываю свободные операторы, которые идентичны операторам Destroy, в Create (и соответствующим образом изменяю операторы возврата), я не получаю утечку памяти.Почему перемещение свободных операторов в отдельную функцию вызывает утечку памяти?