2012-12-10 67 views
-3

此代码给“总线错误:10”上执行:总线错误:10,在C

int main(int argc, char *argv[]) { 
    int row, column, tick; 
    char *prompt; 
    char c; 

    ... 
    return 0; 
    } 

但是,如果我注释掉char c;声明,节目精运行:

int main(int argc, char *argv[]) { 
    int row, column, tick; 
    char *prompt; 
    //char c; 

    ... 
    return 0; 
    } 

我真的不明白发生了什么事。 char c;只是一个声明,对吧?我在这里没有初始化任何东西。

+3

您需要显示完整的代码。 – Vijay

+0

请显示一个完整的程序,编译和展示您描述的错误。 – fuz

+3

干得好,您只省略了必备部分... – 2012-12-10 05:52:26

回答

3

您正在抛出程序中带有错误的部分。如果你移动一个声明,你的程序似乎工作的原因是你正在重新安排栈,以便它能正常工作。

+0

我会寻找我的代码的相关部分。重新排列堆栈是什么意思? – zaz

+1

这些变量的内存被保存在堆栈中,因此添加或删除一个变量会改变堆栈中“存储”的内存以及它的排列方式。代码的问题可能是覆盖部分堆栈和导致该错误的特定位置; addig /消除变量不会消除错误,但它的表现。 – ShinTakezou

1

你在哪个CPU上运行?

总线错误可能意味着至少未对齐的内存访问,这通常是通过未初始化或损坏的指针访问内存的结果。

当删除char时程序没有崩溃或不崩溃可能是更改代码的随机副作用。这并不意味着任何只是这个字符,任何改变都可能造成或破坏它。

你有

char *prompt; 

这是一个有点suspicous。这是不明智的离开uninitialzied这样的指针,通过改变(在你的代码和每一个类似的地方)开始:

char *prompt = 0; // NULL 

所以,如果你以前真正的初始化使用它,你会得到分段错误,而不是内存损坏。