我对C编程很陌生并且遇到了一个奇怪的问题。我有一个全局变量 tri ,它是一个带有几个成员的结构( tri_fact )。其中两个成员(三 .Q和三 .R)又是密集矩阵的另一种结构( dense_mat )。
我有一个函数将这些密集矩阵中的一些初始化为零。我遇到的问题是,当退出初始化函数时,这些矩阵之一具有垃圾值。然而,在退出之前,一切看起来都不错。
struct tri_fact tri;
void init_func(){
/*do some initializations*/
/*tri.Q and tri.R looks good*/
}
void func(){
init_func();
/* tri.R looks good, but tri.Q is filled with junk */
}
我错过了一些基本的东西吗?
答案 0 :(得分:1)
您应该注意的基本概念是 undefined behavior 。请参阅this以了解其严重性。阅读here的参考文献。
您是否编译了整个程序(所有代码)以及所有警告和调试信息?使用GCC -e.g.在Linux上 - 这意味着gcc -Wall -Wextra -g
。
然后你应该使用调试器(Linux上的gdb
)并且可能使用watchpoints。也许禁用ASLR可能值得找到你的错误。
使用最近的GCC,您还可以使用各种-fsanitize=
选项,尤其是使用-fsanitize=address
进行编译。 valgrind工具也非常有用。