int n;
int **arr;
arr = (int**)malloc(n*sizeof(int));
for (i=0; i<n; ++i){
arr[i] = malloc(2*sizeof(int));
}
[РЕДАКТИРОВАТЬ]
*** glibc detected *** ./abc: double free or corruption (out): 0x0000000002693370
======= Backtrace: =========
/lib/libc.so.6(+0x775b6)[0x7f42719465b6]
/lib/libc.so.6(cfree+0x73)[0x7f427194ce53]
./abc[0x405f01]
/lib/libc.so.6(__libc_start_main+0xfd)[0x7f42718edc4d]
./abc[0x400ee9]
======= Memory map: ========
00400000-00416000 r-xp 00000000 08:07 392882
00616000-00617000 r--p 00016000 08:07 392882
Я пытался ответить на следующие вопросы, но я получил следующую выше ошибку. В чем может быть причина?
[EDIT]
Вышеупомянутая проблема теперь решена.Так как в коде была ошибкаТеперь, что я не получаю, так это какого-либо улучшения в освобожденной памяти. Что может быть причиной этого?
[EDIT] Я использую некоторые модули для печати памяти. Ниже приведен код
memory_Print();
#ifdef CHECK
memory_PrintLeaks();
#endif
Здесь memory_PrintLeaks()
печатает требуемую память и освобожденную память. Я получаю одинаковое значениепосле внесения изменений.
Еще одно замечание, которое я хотел бы добавить: могу ли я вызвать функцию free () в любом месте программы или требуется вызывать из определенных мест, например из того места, где malloc () был вызван или в конце программы?