阵列。访问0xFFFFFFFF元素

时间:2013-09-08 08:07:42

标签: c arrays memory stack

我的代码类似于以下内容。

    int foo (unsigned int a)
    {

    struct tid{
        int id;
        char abd[8];
        };
    int ret = 0;
    struct tid arr[256];

    ret = arr[a];
    ...

    }

传递给foo的值是0xFFFFFFFF。现在,由于我们正在访问堆栈外部的内存位置,我认为系统会出错,但事实并非如此。 我想知道一个方向,我可以看看它是如何工作的。 正在考虑的机器是MIPS 4K,具有32位寻址和256 MB RAM。我正在使用gcc在x86 PC上交叉编译代码。

1 个答案:

答案 0 :(得分:4)

  

现在,由于我们正在访问堆栈外部的内存位置,我认为系统会出错,但事实并非如此。

在堆栈上分配的内存范围之外写入undefined behaviour。通常(但不总是)调用此未定义的行为会导致段错误。 但是,你不能确定会发生段错误。

维基百科链接很好地解释了它:

  

当出现未定义行为的实例时,就语言规范而言,任何事情都可能发生,也许什么都没发生。

因此,在这种情况下,您可能会遇到段错误,程序可能会中止,或者有时可能会运行正常。或者,任何事情。没有办法保证结果。

  

我想知道一个方向,我可以看看它是如何工作的。

我不确定你在这里问的是什么。你能澄清“工作”的意思吗?你想要这个程序做什么?