-3

此代码在执行时给出“总线错误: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;只是一个声明,对吧?我没有在这里初始化任何东西。

4

2 回答 2

4

您正在遗漏带有错误的程序部分。如果您移动声明,您的程序似乎可以工作的原因是您正在重新排列堆栈以使其工作。

于 2012-12-10T05:48:02.147 回答
1

你在哪个 CPU 上运行?

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

删除字符时程序不崩溃或不崩溃可能是更改代码的随机副作用。这并不意味着它只是那个字符,任何更改都可能导致或破坏它。

你有

char *prompt;

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

char *prompt = 0; // NULL

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

于 2012-12-10T13:43:23.273 回答