Wenn ich diesen Code ausführen wird mir "Segmentation Fault" gezeigt, aber wenn in der "für" der "create" -Funktion ich die Klausel setzen i < 1 (dh einen Zyklus), die Programm funktioniert, warum?Segmentierungsfehler bei Realloc ANSI C
void create(char ***a,int *length){
int i=0;
*length = 0;
for(i=0;i<4;i++){
++(*length);
(*a)=realloc(*a,(*length)*sizeof(char *));
*(a[i])="Hello\0";
}
}
int main(int argc, char *argv[]) {
int i;
char **a = NULL;
int *l = malloc(sizeof(int));
create(&a,l);
for (i=0; i<(*l); i++) {
printf("%s",a[i]);
}
printf("\n");
return EXIT_SUCCESS;
}
was würde Ich mag ist, dass das Programm zeigt mir 4 mal "Hallo" am Ende,
Warum ordnen Sie Speicher für "l" dynamisch zu, anstatt es nur als normale Nicht-Zeigervariable zu deklarieren und mit dem Address-of-Operator zu übergeben? Es gibt noch ein paar andere Dinge, die merkwürdig oder einfach falsch erscheinen: In der Kategorie "odd" wird der explizite String-Terminator in der Konstanten-Zeichenfolge verwendet, die nicht benötigt wird, und im "falschen" Teil dem Zeiger neu zugewiesen Sie werden neu zugewiesen (denken Sie daran, was passiert, wenn 'realloc 'fehlschlägt). –
Versuchen Sie auch zu vermeiden, ein [Drei-Sterne-Programmierer] (http://c2.com/cgi/wiki?ThreeStarProgrammer) zu sein, es ist normalerweise kein Kompliment. –
@JoachimPileborg: Wie würden Sie dann diesen Anwendungsfall über ein Funktionsargument behandeln, wenn nicht über 'T ***'? – alk