Ich versuche, eine Sequenz von Buchstaben vom Benutzer zu erhalten und die Eingabe in ein dynamisches Array zu setzen.Realloc schlägt nach der 10. Iteration innerhalb einer Schleife fehl
Aber aus einem Grund kann ich nicht ganz herausfinden - Realloc schlägt fehl (gibt NULL zurück und "Fehler beim Zuweisen von Speicher!" Wird gedruckt), wenn der Benutzer mehr als 10 Buchstaben eingegeben hat. Ich habe versucht, Realloc zu Calloc zu ändern, und das scheint es zu lösen, aber ich bin mir nicht sicher warum.
#include <stdio.h>
#include <stdlib.h>
int main (int argc, char **argv) {
char *first_string, *second_string, *memory_check;
char user_input;
int first_string_size = 0, second_string_size = 0, debug =1;
first_string = malloc(sizeof(char));
second_string = malloc(sizeof(char));
// gets the strings from the user
printf("Input the first string:");
for(int i = 0;;i++) {
user_input= getchar();
if(user_input == EOF || user_input == '\0' || user_input == '\n') {
break;
}
first_string[i] = user_input;
memory_check = realloc(first_string, (i+1)*(sizeof(char)));
if(memory_check == NULL) {
printf("\nError allocating memory!\n");
break;
}
first_string_size = i;
if(debug == 1) {
printf("\n number of letters is %d", first_string_size +1);
printf("\n array size in memory is %d", sizeof(first_string) * (i+1));
}
}
return 0;
}
Probieren Sie 'perror' beim Drucken von Fehlern, es gibt weitere Details. Ändere deine 'printf (" Error alloc.. "zu' perror ("realloc"); ' –
Zwei nicht verwandte Hinweise: 1) Grow um einen größeren Betrag als N + 1, zB verdopple immer die Größe, wenn der Speicherplatz erschöpft ist) sizeof (char) ist [definiert als 1] (http://chimera.roma1.infn.it/SP/COMMON/iso-iec-9899-1990.pdf#page=108&zoom=auto,-133,792). – kay
'memory_check' ist der neu zugewiesene Zeiger, Sie müssen diesen Wert mit' first_string' handeln. 'first_string' zeigt auf Speicher, der bereits freigegeben wurde (durch realloc). – MFisherKDX