Lines with Realloc in C

I am trying to use the realloc function to make the array bigger as the user entered the names. This gives me an error when I add an 5. element, an error like: * glibc ./a.out detected: realloc (): invalid next size: 0x00000000017d2010 ** And code:

#include <stdio.h> #include <stdlib.h> #include <string.h> int main(void){ char **mtn = NULL; char x[30]; int i = 0; while ( strcmp(gets(x), "finish") ){ mtn = realloc( mtn, i*sizeof(char) ); // mtn[i] = realloc( mtn[i], sizeof(x) ); // tried but didnt work mtn[i] = x; i++; } puts(mtn[1]); return 0; } 
+4
source share
1 answer
 #include <stdio.h> #include <stdlib.h> #include <string.h> int main(void) { char **mtn = NULL; char x[30]; int i = 0; /* Never use gets, it dangerous, use fgets instead */ while (strcmp(fgets(x, sizeof(x), stdin), "finish\n")){ /* your previous realloc was realloc(mtn, 0) and you have to take space for <char *> */ mtn = realloc(mtn, (i + 1) * sizeof(char *)); /* always check return of xalloc */ if (mtn == NULL) { perror("realloc"); exit(EXIT_FAILURE); } /* you still need space for store x */ mtn[i] = malloc(strlen(x) + 1); if (mtn[i] == NULL) { perror("malloc"); exit(EXIT_FAILURE); } strcpy(mtn[i], x); /* mtn[i] = x is not valid */ i++; } printf("%s", mtn[1]); /* always free xallocs in order to prevent memory leaks */ while (i--) free(mtn[i]); free(mtn); return 0; } 
+3
source

All Articles