退出函数C时的全局变量值

时间:2015-07-10 17:15:02

标签: c struct

我对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 */
}

我错过了一些基本的东西吗?

1 个答案:

答案 0 :(得分:1)

您应该注意的基本概念是 undefined behavior 。请参阅this以了解其严重性。阅读here的参考文献。

您是否编译了整个程序(所有代码)以及所有警告和调试信息?使用GCC -e.g.在Linux上 - 这意味着gcc -Wall -Wextra -g

然后你应该使用调试器(Linux上的gdb)并且可能使用watchpoints。也许禁用ASLR可能值得找到你的错误。

使用最近的GCC,您还可以使用各种-fsanitize=选项,尤其是使用-fsanitize=address进行编译。 valgrind工具也非常有用。