我正在尝试从另一个函数更改数组的大小。代码编译但程序崩溃......我被卡住了,非常困难。新的,我的头向左旋转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
答案 0 :(得分:1)
free(array);
array->data = (int*) malloc(sizeof(int) * size);
在这里,您可以免费array
,并在下一行取消引用它。这是未定义的行为。但似乎是导致事故发生的原因。
答案 1 :(得分:1)
此:
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
。