I am trying to use realloc function as making the array bigger as the user entered names. It gives me an error when I add 5. element, the error like : * glibc detected ./a.out: realloc(): invalid next size: 0x00000000017d2010 ** And the code is:
#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;
}
#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's 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;
}