首页 > 解决方案 > 为什么我可以使用比分配更多的内存?

问题描述

我在搞乱 memset 函数并这样做了:

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

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

标签: c++cmallocmemset

解决方案


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

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

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


推荐阅读