You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于malloc/free中指向数组的指针的使用疑问

关于C语言中指向数组的指针与free的疑惑

先看这段C代码:

#include <stdlib.h>

void foo(char n)
{
    int (*vals)[n] = malloc(sizeof(int[n]));

    for (int i = 0; i < n; ++i)
        (*vals)[i] = i;

    free(vals);
}

int main(int argc, char **argv)
{
    foo(*(argv[1]));

    return 0;
}

其中free(vals);这行让我很困惑:vals是指向数组的指针,虽然运行起来看似正确,但我没法彻底理解逻辑。我更习惯这种写法:

int *p = (int*)malloc(n * sizeof(int));
......
free(p);

这种写法里malloc和free操作的都是int*类型,完全对称,但原代码里malloc配合的是指向数组的指针,free却直接使用这个指针。

我好奇地把代码改成free(*vals);,原以为会编译失败(因为*vals是数组类型),但GCC编译通过,而且用Valgrind检测也没报内存泄漏。我知道C语言里函数调用时数组会退化为指针的规则,但理解得不够透彻,希望能找到C99及以后的权威文档、Stack Overflow讨论或者技术博客来彻底搞懂这个问题。

内容的提问来源于stack exchange,提问作者my_question

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 23:35:40