Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
总线错误:10,在C中_C - Fatal编程技术网

总线错误:10,在C中

总线错误:10,在C中,c,C,此代码在执行时给出“总线错误:10”: int main(int argc, char *argv[]) { int row, column, tick; char *prompt; char c; ... return 0; } 然而,如果我注释掉字符c声明,程序运行正常: int main(int argc, char *argv[]) { int row, column, tick; char *prompt; /

此代码在执行时给出“总线错误:10”:

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

    ...
    return 0;
    }
然而,如果我注释掉
字符c声明,程序运行正常:

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

    ...
    return 0;
    }

我真的不明白发生了什么事<代码>字符c只是一个声明,对吗?我没有在这里初始化任何东西

您正在删除程序中有bug的部分。如果您移动一个声明,您的程序似乎可以工作的原因是您正在重新排列堆栈,以便它可以工作

您在哪个CPU上运行

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

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

你有

char *prompt;
这有点可疑。让指针处于未初始化状态是不明智的,首先将其(以及代码中的每个类似位置)更改为:


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

您需要显示完整的代码。请显示编译并显示您描述的错误的完整程序。做得好,您只省略了基本部分…此代码在执行时不会出现任何错误。请发布真实的代码。稍后在代码中的某个地方,你向随机方向射击。没有声明,你就击中了一些重要的东西,杀死了一些东西。声明将重要的事情移开,并导致您的随机射击失误。错误在你截取的代码中。我将查找代码的相关部分。重新排列堆栈是什么意思?这些变量的内存保留在堆栈上,因此添加或删除一个变量将改变堆栈中“占用”的内存量以及如何排列,也就是说。代码的问题可能是覆盖堆栈的一部分和导致该错误的特定位置;添加/删除变量不会删除bug,但会删除其表现形式。
char *prompt = 0; // NULL