int n;
int **arr;
arr = (int**)malloc(n*sizeof(int));
for (i=0; i<n; ++i){
arr[i] = malloc(2*sizeof(int));
}
[EDIT]wie die Zuweisung der Speicher auf den Malloc im folgenden Code freigeben?
*** 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
ich mit den folgenden genannten Antworten versucht, aber ich habe die folgenden oben genannten error.What der Grund dafür sein?
[EDIT]
Das oben erwähnte Problem ist nun behoben. Da war ein Fehler im Code. Nun, was ich nicht bekomme, ist eine Verbesserung des freigewordenen Gedächtnisses. Was kann der Grund dafür sein?
[EDIT] ich einige Module bin mit dem memory.following drucken ist, den Code
memory_Print();
#ifdef CHECK
memory_PrintLeaks();
#endif
Hier memory_PrintLeaks()
druckt den geforderten Speicher und befreit memory.I den gleichen Wert ist immer die Änderungen nach der Herstellung. Eine weitere Bemerkung, die ich hinzufügen möchte, ist, kann ich die freie() irgendwo aus dem Programm aufrufen oder es ist erforderlich, von einigen bestimmten Orten wie der Ort, an dem der malloc() aufgerufen wurde oder an der Ende des Programms?
Sie haben einen Fehler. Das erste "malloc" reserviert Platz für "Zeiger", nicht "Ints". Der Funktionsaufruf sollte 'malloc (n * sizeof (int *)) sein' – Blastfurnace
ja, es funktionierte jetzt. Aber warum ist das Speicherleck für mich dasselbe, nachdem ich das auch gemacht habe? Ich bekomme keine Verbesserung im Gedächtnis. – thetna
Bearbeiten Sie Ihren Code, um anzuzeigen, wie Sie den Speicher "freigeben". – Blastfurnace