【问题标题】:How to free size_t from struct如何从结构中释放 size_t
【发布时间】:2012-12-23 17:43:27
【问题描述】:

我正在尝试释放具有 size_t 变量和 char 的结构的元素。如何释放 size_t 的,因为我不断收到类似的警告

[Warning] passing arg 1 of `free' makes pointer from integer without a cast

现在我知道我需要制作演员表,但我不知道该怎么做!代码如下:

typedef struct collection
{
    char **c;
    size_t nc, na, ne;
} TCS, * ACS;

void Destroy(ACS *x)
{
    int i;
    free((*x)->na);
    for(i=0;i<(*x)->nc;i++)
        free((*x)->c[i]);
    free((*x)->c);
    free((*x)->nc);
    free((*x)->ne);

}

/* allocating */
ACS AlocCS(size_t d, size_t e)
{
    ACS *af=(ACS*)malloc(d);
    if(af==NULL)
        return 0;
    (*af)->na=e;
    (*af)->nc=d;
    (*af)->c=(char**)calloc(e*d,sizeof(char));
    if((*af)->c==NULL){
        free(af);
        return 0;}            

    return *af;
}

我收到 3 个警告,均与 na,ne,nc 有关。我在跳过什么?谢谢!

LE:谢谢大家,我的项目现在可以运行了!节日快乐!

【问题讨论】:

    标签: c struct free size-t


    【解决方案1】:

    我收到 3 个警告,均与 na,ne,nc 有关。我跳过了什么?

    malloc 返回一个指向动态分配内存区域的指针。 size_t 变量不能保存这样的地址。

    您只需要释放您分配的内容,即(*af)-&gt;caf

    【讨论】:

      【解决方案2】:

      如果你还没有动态分配变量:

      size_t nc, na, ne;
      

      没有理由释放它们。

      您不能在静态分配的变量上调用free,只能在存储在指针中的地址上调用,该指针指向以前分配的区域。

      当你这样做时:

      (*af)->na=e; 
      (*af)->nc=d; 
      

      您没有分配变量nanc;您只是为这些变量赋值,这些变量属于以前分配的结构,并由存储在af 中的地址指向。

      【讨论】:

      • 嗯,从某种意义上说,他有。他分配了整个struct collection 对象,其中包含这些。但是释放所述对象会自动释放它们,所以是的,单独释放它们是没有意义的。
      • 我有,但没有发布该功能。立即编辑。
      • @user1889921 请将此信息添加到您的问题中,不要在评论中发布。
      【解决方案3】:

      您应该只对通过调用mallocrealloccalloc 等分配的对象调用free。由于这三个字段不是以这种方式创建的,因此您不应尝试free 它们.

      这三个字段的内存是分配结构时分配的结构的一部分。它没有单独分配。因此不需要单独的释放。

      【讨论】:

        【解决方案4】:

        size_t 是局部变量,这意味着它们不是动态分配的(即它们是为结构分配的内存的一部分,您不必手动管理它们的内存)。释放结构后,局部变量将自动清理。

        【讨论】:

        • 不是这样。在这种情况下,它们位于堆上。
        • 是的,你是对的。我澄清了我的真正意思。
        • 单独分配比动态分配更清晰。
        猜你喜欢
        • 1970-01-01
        • 2010-09-30
        • 1970-01-01
        • 1970-01-01
        • 2017-03-09
        • 2017-08-24
        • 1970-01-01
        • 2016-04-13
        • 1970-01-01
        相关资源
        最近更新 更多