此代码在执行时提供“总线错误: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;
只是一个宣言,对吗?我不是在这里初始化任何东西。
答案 0 :(得分:4)
你遗漏了程序的一部分。如果您移动声明,程序似乎有效的原因是您正在重新排列堆栈以使其正常工作。
答案 1 :(得分:1)
你在运行哪个CPU?
总线错误至少意味着未对齐的内存访问,这通常是通过未初始化或损坏的指针访问内存的结果。
删除char时程序不会崩溃或不崩溃可能是更改代码的随机副作用。它并不意味着它只是那个char,任何改变都可以成就或破坏它。
你有
char *prompt;
这有点可疑。将指针保留为未初始化是不明智的,首先将其(以及代码中的每个类似位置)更改为:
char *prompt = 0; // NULL
因此,如果在实际初始化之前使用它,您将获得分段错误而不是内存损坏。