【发布时间】:2023-03-11 23:07:01
【问题描述】:
我有以下结构定义(名称已被概括):
typedef struct structure{
int *array1;
int *array2;
} structure_t;
我需要通过一个函数来初始化这个结构数据结构,该函数将两个数组的大小作为参数。该函数返回一个指向该数据结构的指针,失败时返回 NULL。
我对如何解决这个问题感到困惑。我知道我不能返回本地声明的结构的指针,而且我也知道我需要为两个成员 array1 和 array2 动态分配内存,因为在编译时不知道大小(它是由这个用户输入的)。我尝试了以下方法:
structure_t* init(int size1, int size2)
{
structure_t *st = malloc(sizeof (structure_t));
if(st == NULL) return NULL;
st->array1 = malloc((sizeof (int))*size1);
st->array2 = malloc((sizeof (int))*size2);
return st;
}
我已经检查过了,一切都在初始化。但是当我释放内存时,它无法正常工作,因为只有指向 array1 的指针被更改为 NULL。
bool destroy(strcuture_t *st)
{
free(st->array1);
free(st->array2);
free(st);
if (st == NULL)
return true;
else
return false;
}
我做错了什么?
【问题讨论】:
-
free()不会,而且无法更改您传递给它的指针的值。
标签: c pointers struct initialization malloc