关于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
相关产品推荐
相关产品推荐

