总线错误:10,在C中

时间:2012-12-10 05:46:33

标签: c

此代码在执行时提供“总线错误:10”

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;只是一个宣言,对吗?我不是在这里初始化任何东西。

2 个答案:

答案 0 :(得分:4)

你遗漏了程序的一部分。如果您移动声明,程序似乎有效的原因是您正在重新排列堆栈以使其正常工作。

答案 1 :(得分:1)

你在运行哪个CPU?

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

删除char时程序不会崩溃或不崩溃可能是更改代码的随机副作用。它并不意味着它只是那个char,任何改变都可以成就或破坏它。

你有

char *prompt;

这有点可疑。将指针保留为未初始化是不明智的,首先将其(以及代码中的每个类似位置)更改为:

char *prompt = 0; // NULL

因此,如果在实际初始化之前使用它,您将获得分段错误而不是内存损坏。