Jim*_*ron 0 c linux malloc dynamic-memory-allocation
当我创建一个动态数组时:
int *arr = (int *) malloc( 4 * sizeof(int) );
Run Code Online (Sandbox Code Playgroud)
所以它应该包含 4 个整数(对于空间问题可能还有 2 或 3 个),但为什么这样做:
for ( int x = 0; x < 30000; x++) {
arr[x] = x;
}
Run Code Online (Sandbox Code Playgroud)
我的意思是不应该有 30.000 个变量的空间,而且它工作得很好,可能是什么原因?它是否像 c++ std::vector 一样自动重新分配,或者我如何理解它?
如果我将循环范围设置为 50.000,它会崩溃,但它甚至应该像索引 a[100] 或之前那样崩溃,因为数组有 4 个元素。
如果这很重要,我正在使用 gnu/linux。
我非常努力地理解它。
请帮忙
正如上面的评论中提到的,C不是“边界检查”语言(如果这是你需要的,有很多替代方案可供选择,从 D 到 Nim,也可以很容易地与纯 ANSI C 混合)。
现在,回到你的问题。
你所做的是为 4 个整数分配一些内存。到现在为止还挺好。
您可以访问内存的其他部分(或比最初分配的内存更多的内存 - 请参阅:超出范围)并侥幸逃脱,并不意味着您应该这样做。它可能会崩溃,也可能不会。这就是人们所说的“未定义行为”。
现在,如果您想安全起见,请按照您应该的方式进行: