По какой-то причине, когда я перераспределяю массив, чтобы добавить элемент в массив, он работает только дважды перед сегментированием. Segfault происходит, когда я пытаюсь распечатать строки внутри массива. В настоящее время у меня есть массив, который NULL
завершен.
void apparr(char** arr, char* line) {
int length = 0;
// find the length of the array
while(arr[length] != NULL) {
length++;
}
// realloc with 2 extra spaces (1 for line, 1 for NULL)
arr = realloc(arr, sizeof(char*) * (length+2));
// set last element (which was NULL) to line
arr[length] = line;
// set the NULL terminator
arr[length+1] = NULL;
}
Я понятия не имею, где я могу пойти не так, мое единственное предположение будет о том, как я называю realloc. Тем не менее, я понимаю, что это не работает для 1 изменения размера, но я понятия не имею, почему это работает для двух изменений размера, а затем segfaults, когда я печатаю обратно массив.
Как это можно использовать в main:
int main(int argc, char** argv){
char** hist = malloc(sizeof(char**));
char* linep1;
char* linep2;
char* linep3;
char* linep4;
linep1 = (char*)malloc(strlen("test")*sizeof(char));
linep2 = (char*)malloc(strlen("test2")*sizeof(char));
linep3 = (char*)malloc(strlen("test3")*sizeof(char));
linep4 = (char*)malloc(strlen("test4")*sizeof(char));
strcpy(linep1, "test");
strcpy(linep2, "test2");
strcpy(linep3, "test3");
strcpy(linep4, "test4");
apphist(hist, linep1);
apphist(hist, linep2);
//apphist(hist, linep3); //uncommenting this line causes nothing to be printed
//apphist(hist, linep4); //uncommenting this line causes only test4 to be printed
int x = 0;
while (hist[x] != NULL) {
printf("%s\n", hist[x]);
x++;
}
}