释放一个 int* 结构
Freeing a struct of int*
我有一个结构,我存储一个整数数组,定义为:
typedef struct {
int* numArr;
int counter;
}NumberArr;
我已将其初始化为:(int*)malloc(sizeof(int))
并在我需要添加数字时重新分配:num.numArr = realloc(num.numArr, sizeof(int) * (counter+1));
我在为此结构调用 free 时遇到问题。
我试过:
void free_data(NumberArr num) {
for (int i = 0; i < num.counter; i++) {
free(num.numArr[i]);
}
free(num.numArr);
}
当我这样做时,我收到一条错误消息,说它不是 void 指针类型。但我不知道该怎么做才能把它变成一个,这样我就可以释放它了。
这是因为numArr
是一个单指针(*
)。你只需要释放它一次。你的函数 free_date
参数应该是指向 NumberArr
的指针,然后像 &var
.
一样传递变量的地址
void free_data(NumberArr *num) {
free(num->numArr);
}
您正在使用的概念在释放时被使用 double-pointer int **
。
我有一个结构,我存储一个整数数组,定义为:
typedef struct {
int* numArr;
int counter;
}NumberArr;
我已将其初始化为:(int*)malloc(sizeof(int))
并在我需要添加数字时重新分配:num.numArr = realloc(num.numArr, sizeof(int) * (counter+1));
我在为此结构调用 free 时遇到问题。 我试过:
void free_data(NumberArr num) {
for (int i = 0; i < num.counter; i++) {
free(num.numArr[i]);
}
free(num.numArr);
}
当我这样做时,我收到一条错误消息,说它不是 void 指针类型。但我不知道该怎么做才能把它变成一个,这样我就可以释放它了。
这是因为numArr
是一个单指针(*
)。你只需要释放它一次。你的函数 free_date
参数应该是指向 NumberArr
的指针,然后像 &var
.
void free_data(NumberArr *num) {
free(num->numArr);
}
您正在使用的概念在释放时被使用 double-pointer int **
。