2013-05-12 66 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