我一直在摆弄memset函数,结果是:
int* p = malloc(sizeof(int);
memset(p, 0, 10000);
我想知道为什么这是有效的。我只分配了5个字节的内存,但我可以用memset占用10000个。如果我可以占用比分配的更多的内存,为什么还要对内存进行malloc?有人能解释一下吗?
这是未定义的行为,在中可以这样做,但结果没有定义,在不可预测的情况下,在程序中可能崩溃。
在这种情况下,您只能写入分配的区域或sizeof(int) * 5
。
为什么C不阻止你这么做?这是因为语言设计的理念是程序员知道他们在做什么,不要妨碍他们。
我想知道为什么这是有效的。
它无效。
如果我可以占用比分配的更多的内存,为什么还要对内存进行malloc?有人能解释一下吗?
因为你做不到。
您分配的内存溢出。程序的行为是未定义的。