为什么我可以使用比分配的内存更多的内存

Why can I use more memory than allocated?

本文关键字:内存 分配 我可以 可以使 为什么      更新时间:2023-10-16

我一直在摆弄memset函数,结果是:

int* p = malloc(sizeof(int);
memset(p, 0, 10000);

我想知道为什么这是有效的。我只分配了5个字节的内存,但我可以用memset占用10000个。如果我可以占用比分配的更多的内存,为什么还要对内存进行malloc?有人能解释一下吗?

这是未定义的行为,在中可以这样做,但结果没有定义,在不可预测的情况下,在程序中可能崩溃。

在这种情况下,您只能写入分配的区域或sizeof(int) * 5

为什么C不阻止你这么做?这是因为语言设计的理念是程序员知道他们在做什么,不要妨碍他们。

我想知道为什么这是有效的。

无效。

如果我可以占用比分配的更多的内存,为什么还要对内存进行malloc?有人能解释一下吗?

因为你做不到。

您分配的内存溢出。程序的行为是未定义的。