2015-07-10 83 views
-1

我对C编程颇为陌生,并且遇到了一个奇怪的问题。我有一个全局变量tri这是一个结构(tri_fact)与几个成员。这些成员中的两个(tri.Q和tri.R)依次是密集矩阵的不同类型的结构(dense_mat)。退出函数C时的全局变量更改值

我有一个函数来初始化一些这些密集矩阵为零。我遇到的问题是当初始化函数退出时,其中一个矩阵具有垃圾值。然而,在退出之前,一切看起来都不错。

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

我是否缺少一些基本的东西?

+6

您需要发表更多的代码。根据你迄今所说的话,它应该可以工作。请创建一个[演示该问题的最小示例](http://stackoverflow.com/help/mcve) –

+1

很难说,看不到'init_func'中的代码 –

+0

简单的猜测:您使用了一些指针,这些指针正在被覆盖的toblocal变量当函数退出时。 – nneonneo

回答

1

你应该知道的基本概念是undefined behavior。请参阅this了解它是严重的。阅读here的参考文献。

你是否用所有的警告和调试信息编译了你的整个程序(所有代码)?用GCC - 例如在Linux上 - 这意味着gcc -Wall -Wextra -g

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

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