#include<stdio.h>
#include<stdlib.h>
int main()
{
char *p;
p=malloc(1);
scanf("%s",p);
printf("%s",p);
free(p);
}
代码只需要27个字符,然后发生分段错误。任何人都可以解释malloc(1)的这种奇怪行为吗?
答案 0 :(得分:4)
您只分配一个字节。在您的示例中的第一个字节之后的任何时刻,段错误都是公平的游戏。它恰好是27个字节。每次运行程序时都可能不同
编辑: 如果您只想分配一个字符来读取单个字符,请将您的功能更改为:
scanf(" %c", p);
printf("%c", p);
scanf上字符说明符前面的前导空格是欺骗scanf忽略它可能尝试分配给缓冲区的任何空白区域(如果存在)