#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; }
source share