#include <stdio.h>
#include <stdlib.h>
int main()
{
char *p = malloc(sizeof(void));
p[0] = 'a';
p[1] = 'b';
p[2] = 'c';
p[3] = 'd';
p[4] = 'e';
printf("%c\n",p[0]);
printf("%c\n",p[1]);
printf("%c\n",p[2]);
printf("%c\n",p[3]);
printf("%c\n",p[4]);
return 0;
}
//在上面的代码中,只应分配一个字节的内存,因为sizeof(void)只是&#39; 1&#39;,但为什么我能成功打印所有字符?
同样对于以下程序也是成功打印
#include <stdio.h>
#include <stdlib.h>
int main()
{
char *p = malloc(0);
p[0] = 'a';
p[1] = 'b';
p[2] = 'c';
p[3] = 'd';
p[4] = 'e';
printf("%c\n",p[0]);
printf("%c\n",p[1]);
printf("%c\n",p[2]);
printf("%c\n",p[3]);
printf("%c\n",p[4]);
return 0;
}
请说明为什么这两种情况都成功打印了msg,即使没有为此分配内存?
答案 0 :(得分:0)
您正在利用未定义的行为。
在其他情况下,编译器可能会吃掉你的猫。
(可能发生的事情是,C运行时库为您提供的内存比您实际要求的内存更多。)