calloc und free eines 2d Arrays
-
Hey Community,
ich sitze im Moment an einem Projekt und bin auf ein Problem gestoßen, dass ich selber leider grade nicht lösen kann. Vielleicht hab ich einfach ein Brett vor dem Kopf
Und zwar möchte ich gerne ein 2 dimensionales Array anlegen und dieses später natürlich auch wieder freigeben. Allerdings bekomme ich bei bestimmten Eingaben die Fehlermeldung:
*** glibc detected *** ./a.out: double free or corruption (out): 0x01f20020 ***
Hier mal der Quellcode des Problems.
int main (void) { int beliebige_zahl_1,beliebige_zahl_2,i; beliebige_zahl_1 = 5; //beliebige_zahl_1 = 14; beliebige_zahl_2 = 5; int** ergebnis; ergebnis = (int**) calloc(beliebige_zahl_1,sizeof(int*)); for (i = 0 ; i <= beliebige_zahl_1 ; i++) ergebnis[i] = (int*) calloc(beliebige_zahl_2,sizeof(*ergebnis[i])); for (i = 0 ; i <= beliebige_zahl_1 ; i++) free(ergebnis[i]); free(ergebnis); return 0; }
Wenn ich beliebige_zahl_1 auf 5 setze, kommt die Meldung und wenn ich es beispielsweise auf 14 setze, funktioniert alles ohne Fehlermeldung.
Woran liegt das?
Danke schonmal für eine Antwort
-
Es liegt an "<=" statt "<" in den Schleifenbedingungen.
-
Ich sag ja, Brett vorm Kopf
Warum tritt der Fehler denn nicht auf, wenn ich die Zahl auf 14 setze?
-
Bad_Ace schrieb:
Warum tritt der Fehler denn nicht auf, wenn ich die Zahl auf 14 setze?
Weil undefiniertes Verhalten auch mal funktionieren darf. Falsch ist es aber trotzdem und würde dir wahrscheinlich früher oder später an anderer Stelle um die Ohren fliegen.