Ich bin derzeit mit c herumspielen Ich habe ein paar Schluckauf in der Zeigerverwendung und Syntaxbereich.Malloc'ing Arrays und dann Free'ing sie?
Unten (ich versuche) ein Array von Zeigern zu Integer-Arrays zu erstellen, dann jeden Zeiger auf ein Array zu richten, das über malloc() erstellt wurde.
Nachdem die Arrays erstellt wurden, gehe ich dann für jede Zelle durch und lege einen Wert fest.
Jetzt scheint das alles zu funktionieren, aber wenn es darum geht, free() zu verwenden, um den Speicher zurückzunehmen, stürzt das Programm ab.
Ich habe festgestellt, dass, wenn ich malloc() den Array-Speicher und dann sofort kostenlos() auf sie aufrufen, das Programm ohne Problem ausgeführt wird. Wenn ich jedoch malloc() Werte vergebe und DANN frei rufe() wird der Absturz auftreten. (Segmentierungsfehler)
Unten ist der Code, danach frei, malloc() dann sofort frei() ing
int (*ptrArr[5])[5];
for(int i=0; i<5; i++)
ptrArr[i] = malloc(sizeof(int) * 5);
for(int i=0; i<5; i++)
printf("ptrArr[%d][%x]->[%x]\n", i, &ptrArr[i], &*ptrArr[i]);
printf("\n");
for(int i=0; i<5; i++){
for(int j=0; j<5; j++){
printf("[%x](%2d) | ", &*ptrArr[i][j], *ptrArr[i][j]);
}
printf("\n");
}
for(int i=4; i>=0; i--)
free(ptrArr[i]);
die oben ausführt, wie ich es erwartet, aber wenn ich Werte zuweisen Zellen und dann versuchen, und rufen Sie arbeitet ein Segmentierungsfehler generiert:
int (*ptrArr[5])[5];
for(int i=0; i<5; i++)
ptrArr[i] = malloc(sizeof(int) * 5);
for(int i=0; i<5; i++)
printf("ptrArr[%d][%x]->[%x]\n", i, &ptrArr[i], &*ptrArr[i]);
printf("\n");
for(int i=0; i<5; i++){
for(int j=0; j<5; j++){
printf("[%x](%2d) | ", &*ptrArr[i][j], *ptrArr[i][j]);
}
printf("\n");
}
int loop = 5;
for(int i=0; i<5; i++){
for(int j=0; j<5; j++){
*ptrArr[i][j] = (loop + (i*j));
++loop;
}
}
printf("\n");
for(int i=0; i<5; i++){
for(int j=0; j<5; j++){
printf("[%x](%2d) | ", &*ptrArr[i][j], *ptrArr[i][j]);
}
printf("\n");
}
for(int i=4; i>=0; i--)
{
printf("Freeing ptrArr[%x]\n", i);
free(ptrArr[i]);
}
ich glaube, ich bin entweder die
int (*ptrArr[5])[5];
Mißverständnis
Deklaration, die ich beabsichtigte, war ein Array von 5 Zeigern, von denen jeder auf ein Integer-Array zeigt, oder ich werfe Zellen nicht korrekt Werte zu, sondern verdirbt Speicher, der verursacht, dass das free() fehlschlägt.
Jede Hilfe wäre willkommen, ich hoffe, die Frage ist klar und prägnant.
Danke.
'int * ptrArr [5] 'deklariert ein Array von 5 Zeigern. –
Ich glaube nicht, dass der erste Code funktioniert. Versuchen Sie es mit einer Größe größer als 5, vielleicht 10000 –