char指针的行为

时间:2016-12-14 18:33:34

标签: c arrays pointers buffer-overflow

我对以下内容感到困惑:

char *list = malloc(sizeof(char));

list[0] = 'a';
list[1] = 'b';
printf("%s\n", list);

我的期望是某种未定义的行为,因为list只有1个字符“对象”的内存。

但实际输出为ab。当list[1]仅为一个字符分配内存时,为什么可以访问list

1 个答案:

答案 0 :(得分:3)

根据您的内存分配sizeof(char)个字节(并考虑分配成功),

  list[1] = 'b';

是越界访问,调用undefined behavior。导致UB的程序不能有期望。它可以任何,绝对任何

那就是说,

  • sizeof(char)在C标准中被定义为(保证)为1
  • 在使用返回值之前检查malloc()是否成功。否则,第一次访问list[0]本身将调用UB,因为您最终会取消引用无效指针(,即访问无效内存
  • 将指针作为char的参数传递给非空终止的%s数组也会调用UB。
相关问题