请看一下这段代码。我为第一个变量分配一个字节,为第二个变量分配另一个字节。但是,编译器似乎分配了更多(或者我遗漏了一些东西)。该程序输出两个字符串,即使它们的长度多于一个字节。
void main() {
char* some1 = malloc(1);
sprintf(some1,"cool");
char* some2 = malloc(1);
sprintf(some2,"face");
printf("%s ",some1);
printf("%s\n",some2);
}
拜托,任何人都可以了解分配内存时发生的事情。
最佳答案
您正在调用未定义的行为。此时绝对可能发生任何事情,包括您可能会想到的。
实际发生的是系统确实以更大的 block 为您分配内存。因此,当您超出程序定义的范围时,就系统而言,您还没有超出缓冲区。几乎所有的实现都这样做;系统跟踪 16 字节 block 比逐字节跟踪要容易得多。
关于c:内存分配(发生了什么),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2725867/