作者:Levenmamatq_267 | 来源:互联网 | 2023-07-16 11:34
我试图从另一个函数更改数组的大小。代码编译但程序崩溃了…我卡住了,非常困难。新的,我的头向左旋转aaaaah……..array.cstructarray{int*data;ints
我试图从另一个函数更改数组的大小。 代码编译但程序崩溃了…我卡住了,非常困难。 新的,我的头向左旋转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
。
以上就是c/c++开发分享在另一个.c文件中使用函数内部的函数?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注(编程笔记)。