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

Why can I use more memory than allocated?

我在摆弄 memset 函数并这样做了:

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

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

这是未定义的行为,因为你可以做到但结果没有定义,因为不可预测,因为程序可能会崩溃。

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

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

I was wondering why this is valid.

无效。

Why should I even malloc the memory if I can take up more than allocated? Could someone explain?

因为你做不到。

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