我对 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 甚至具有正确的值。
这里发生了什么?
它会在需要时自动分配更多内存吗?但在这种情况下:作为参数给出的初始分配有什么意义?
您正在使用不属于您的内存。可能会发生各种情况,包括崩溃,但您读取的值可能与写入的值不同,或者您可能会在写入时导致传真调制解调器拨打白宫。
这就像在你不拥有的土地上盖房子一样。也许你可以在那里不受干扰地生活很多年。也许政府会拆除它。也许这片土地是一个废弃的铀矿。