在另一个.c文件中使用函数内部的函数?

我试图从另一个函数更改数组的大小。 代码编译但程序崩溃了…我卡住了,非常困难。 新的,我的头向左旋转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.c包含array.c