为什么我可以使用比分配更多的内存?
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?
因为你做不到。
您溢出了您分配的内存。程序的行为未定义。
我在摆弄 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?
因为你做不到。
您溢出了您分配的内存。程序的行为未定义。