无法理解Malloc输出

时间:2014-10-31 17:26:35

标签: c pointers malloc free

#include<stdio.h>
#include<stdlib.h>
int main()
{
    char *p;
    p=malloc(1);
    scanf("%s",p);
    printf("%s",p);
    free(p);
}

代码只需要27个字符,然后发生分段错误。任何人都可以解释malloc(1)的这种奇怪行为吗?

1 个答案:

答案 0 :(得分:4)

您只分配一个字节。在您的示例中的第一个字节之后的任何时刻,段错误都是公平的游戏。它恰好是27个字节。每次运行程序时都可能不同

编辑: 如果您只想分配一个字符来读取单个字符,请将您的功能更改为:

scanf(" %c", p);
printf("%c", p);

scanf上字符说明符前面的前导空格是欺骗scanf忽略它可能尝试分配给缓冲区的任何空白区域(如果存在)