Я создал двойной указатель char, который будет использоваться как двумерный массив для хранения строк. Функция добавления предназначена для добавления строки, предоставленной в конец массива, указатель num_strings предназначен для отслеживания элементов в массиве (так как я не могу использовать sizeof). Кажется, что в какой-то момент функция не выделяет достаточно памяти, но я не могу понять, где и не могу найти другие проблемы.
Я уже пытался выделить как внешнему, так и внутреннему массиву большой объем памяти, гораздо больше, чем им нужно. Проблема сохраняется. Я также попытался скопировать строку в массив после запуска функции.
int main(int argc, char *argv[]) {
char **strings = NULL;
int num_strings = 0;
append(&strings, &num_strings, "Alex");
append(&strings, &num_strings, "Edward");
// Do things with array
for (int i = 0; i < num_strings; i++) {;
printf("%s\n", strings[i]);
}
// Free memory after use
for (int i = 0; i < num_strings; i++) {
free(strings[i]);
}
free(strings);
strings = NULL;
return 0;
}
void append(char ***array, int * num_strings, char *string) {
if (*array == NULL) {
*array = malloc(sizeof(*array)); // start with enough room for 1 item (pointer)
} else {
// reallocate memory for new item
*array = realloc(*array, (((*num_strings) + 1) * sizeof(*array)));
}
printf("Char Size: %lu\n", sizeof(char));
printf("Given Size: %lu\n", sizeof(***(array)));
*(array[*num_strings]) = malloc((strlen(string) + 1) * sizeof(***(array + 0)));
strcpy(*(array[*num_strings]), string);
(*num_strings)++; // increment the number of strings
}
Выходные данные программы должны быть двумя строками, в данный момент она печатает только сначала, а затем вылетает из-за ошибки сегментации.