我试图从另一个函数更改数组的大小。 代码编译但程序崩溃了…我卡住了,非常困难。 新的,我的头向左旋转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++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/519468.html