2013-05-12 88 views
0

我有一個C程序,它採用一個數組作爲輸入,將保存爲3個不同的數組。例如:打印結構作爲函數參數傳遞

0 2 0 
1 0 0 
0 0 3 

將被保存爲Elemenets = [2,1,3]和coresponding值的座標,Rows = [1,2,3] Columns = [2,1,3]在一個struct我創建。

輸入是這樣的:

首先我給所述陣列的尺寸,則非零值的陣列具有的數量,然後用它們的座標值。

當我給我的輸入,我嘗試打印與function print2d(struct arrayCollection the array)陣列,但結構的數組似乎有錯誤的數字內存(內存地址?)。我認爲我做了錯誤的結構,當我通過它作爲參數的函數,但我找不到問題。我也試圖通過引用傳遞結構作爲指針,但我有相同的結果。

這是我program

我的IDE是Xcode和編譯器是蘋果LLVM編譯器4.1

回答

0

你的結構只是有指針,而不是實際的陣列。您正在使這些指針指向本地數組,並且當函數返回時,這些本地數組不再存在,所以指針指向無效的東西。試圖通過這些指針訪問數據是未定義的行爲。

另一種方法是使用malloc爲您的數據動態分配內存,並讓您的結構指針指向動態分配的內存。

+0

我想我得到你說的,但是當我嘗試打印主要內的值的數組,當結構返回時,它的工作原理(只是說)。你能給我一個例子或者你的答案的第二部分是什麼意思嗎? (我的C知識不好:/) – ozmax 2013-05-12 18:07:55

+0

@ozmax:「未定義的行爲」意味着它可能有效,但你不能指望它。 – 2013-05-12 18:29:51

+0

@ozmax:您可以在這裏找到更多信息:http://en.wikipedia.org/wiki/C_dynamic_memory_allocation – 2013-05-12 18:32:35