Привет У меня проблема с освобождением массива в моем коде.Все еще доступные блоки - valgrind
int main(){
int **pole = mallocator(); ...
В основной функции I вызова, который выделяет память и выглядит следующим образом:
int ** mallocator(){
int **pole = (int **) malloc(sizeof(int*)*RADEK);
for(int i=0; i < RADEK; i++){
pole[i] = (int *) malloc(sizeof(int)*RADEK);
}
return pole;
}
И в конце концов я бесплатно его с помощью этой функции:
void freedom(int **pole){
for(int i=0; i < RADEK; i++){
printf("%d\n", i);
free(pole[i]);
}
free(pole);
}
RADEK постоянен со значением 25 Я думал, что это сработало, но valgrind говорит, что у меня 27 ассигнований и 26 frees и говорит, что один блок по-прежнему доступен. Любые идеи о том, как не получить утечек? Спасибо
РЕДАКТИРОВАТЬ: Линия возврата не должна была находиться в цикле, который был сильно скопирован, спасибо, что заметили. Также, вероятно, это была ошибка компилятора. Если я использую gcc вместо g ++, он говорит, что утечек нет, но когда я скомпилирован с g ++, он говорит, что статический все еще доступен: 72,704, даже если я не использую malloc в коде.
Я не думаю, что ваш 'обратный полюс,' находится в правильном положении. – MikeCAT
Говорят, [вы не должны указывать результат 'malloc()' in C] (http://stackoverflow.com/questions/605845/do-i-cast-the-result-of-malloc). – MikeCAT
В какой операционной системе вы работаете? –