检测到堆栈粉碎的奇怪行为"

时间:2015-05-22 05:39:50

标签: c arrays gcc stack

这是我的代码。

struct ar {
    char array[10];
}b;
void func()
{
    char array[10];
    scanf("%s",b.array);
    printf("%s\n", b.array);
    scanf("%s",array);
    printf("%s\n", array);
}

int main(int argc, char **argv)
{
    func();
}

当我从两个数组的命令行给出比数组大小更长的字符串时,我面临堆栈粉碎检测错误,在main中定义的char数组但是数组内部结构没有给出错误和打印正确的字符串。

可能是什么原因?

1 个答案:

答案 0 :(得分:1)

  1. 当你进行数组越界访问时,基本上你所拥有的是未定义的行为。
  2. 此处的全局放入数据段中的.bss段而不是堆栈。
  3. 有可能一切都按预期工作,但这是UB的副作用,在另一种情况下,您可能会看到崩溃。