2015-07-10 84 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工具也可能非常有用。