释放一个 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 **