You got it all wrong.
Code:
void addSomeStrings(char **data)
{
printf("Allocating heap space\n");
data[0] = (char *) malloc(5*sizeof(char *));
data[0] = "first"; // mem leak, use strcpy(data[0],"first");
printf("Reallocating heap space\n");
data = (char **) realloc(data, 2 * sizeof(char *)); // won't change in caller, leak again
data[1] = (char *) malloc(6*sizeof(char *));
data[1] = "second";
printf("Reallocating heap space\n");
data = (char **) realloc(data, 3 * sizeof(char *));
data[2] = (char *) malloc(5*sizeof(char *));
data[2] = "third";
}
int main()
{
char **data;
int i=0;
data = (char **)malloc(sizeof(char *)); // prefer T *p = malloc(sizeof(*p));
addSomeStrings(data);
for (i=0; i<3; i++)
{
printf("String %s\n", data[i]);
}
return 0;
}
I suggest you read a good tutorial on pointer,dynamic memory allocation...