理解 malloc:当我超过分配的内存时,为什么我的程序不会崩溃?

问题描述 投票:0回答:1

我对 malloc 进行了修改,以更好地理解它是如何工作的。 我写了这个程序:

int *array = (int *)malloc(100 * sizeof(int));

for (int i = 0; i < 5000; i++) {
    array[i] = 10;
}
// Element with index 4999 has a correct value 
printf("%d\n", array[4999]);

return 0;

实际上我希望程序会崩溃,因为我只为 100 个整数分配了内存。但我将 5000 个整数写入指针数组。数组中的元素 5000 甚至具有正确的值。

这里发生了什么?

它会在需要时自动分配更多内存吗?但在这种情况下:作为参数给出的初始分配有什么意义?

c memory-management heap-memory
1个回答
0
投票

您正在使用不属于您的内存。可能会发生各种情况,包括崩溃,但您读取的值可能与写入的值不同,或者您可能会在写入时导致传真调制解调器拨打白宫。

这就像在你不拥有的土地上盖房子一样。也许你可以在那里不受干扰地生活很多年。也许政府会拆除它。也许这片土地是一个废弃的铀矿。

© www.soinside.com 2019 - 2024. All rights reserved.