【发布时间】:2011-12-07 05:23:45
【问题描述】:
根据我对 C 的理解,似乎在尝试初始化时都应该使用 malloc(size),例如,一个直到运行时才知道其大小的数组。
但我想知道为什么函数 malloc() 会返回一个指向变量位置的 指针,以及为什么你甚至需要它。
基本上,为什么 C 不把它全部隐藏起来,这样每当你做这样的事情时:
// 'n' gets stdin'ed from the user
...
int someArray[n];
for(int i = 0; i < n; i++)
someArray[i] = 5;
您无需调用 malloc() 或其他函数就可以做到这一点?其他语言是否这样做(通过完全隐藏内存属性/位置)?我觉得作为一个初学者,处理你使用的变量的内存位置的整个过程只会让程序员感到困惑(而且由于其他语言不使用它,C 似乎使一个简单的初始化过程像这样过于复杂)......
基本上,我想问的是为什么 malloc() 甚至是必要的,因为为什么语言不会在内部为您处理所有这些,而程序员不必担心或不必查看内存。谢谢
*edit: 好吧,也许有一些我不知道的 C 版本允许你放弃使用 malloc() 但我们现在试着忽略它......
【问题讨论】:
-
您的问题是关于 VLA 还是关于堆上的动态分配?
-
重新编辑:允许这样做的版本是当前标准 C。忽略它并没有真正意义。
-
VLA 不会让您放弃使用
malloc()。他们可以做malloc()可以做的一些,但绝不是全部。请参阅下面的答案。
标签: c memory-management malloc