Использовать функцию внутри функции из другого .c файла?

Я пытаюсь resize массива из другой функции. Код компилируется, но программа сбой … Я застреваю, очень застрял. Новое к этому, моя голова крутится вверх по левому праву aaaaah ……..

array.c

struct array { int* data; int size; }; struct array* array_create() { struct array* array = (struct array*) malloc(sizeof(struct array)); array->data = (int*) malloc(sizeof(int) * 10000); array->size = 10000; return array; } void array_resize(struct array* array, int size) { if (size > array->size) { free(array); array->data = (int*) malloc(sizeof(int) * size); } array->size = size; } int array_size(struct array* array) { return array->size; } 

array.h

 typedef struct array* ARRAY; ARRAY array_create(); void array_resize(struct array* array, int size); 

edit.c

 void edit() { array_resize(array, 100); // I can run the code but program crashes } 

main.c

 ARRAY array; array = array_create(); edit(); // Program crashes 

  free(array); array->data = (int*) malloc(sizeof(int) * size); 

Здесь вы освобождаете array и разыгрываете его на следующей строке . Это неопределенное поведение. Но, похоже, это причина вашего краха.

Это:

 void array_resize(struct array* array, int size) { if (size > array->size) { free(array); array->data = (int*) malloc(sizeof(int) * size); } array->size = size; } 

Должен быть free(array->data) не free(array) . Или лучше realloc array->data .

Кроме того, если вы не ищете проблемы, объявите свои функции в своих .h файлах, как и в ваших .c файлах, то есть:

 struct array; struct array *array_create(); 

и array.h из array.c .