【发布时间】:2013-02-18 07:45:47
【问题描述】:
所以,我正在尝试全局声明一个 3 维整数数组,以便它可以被两个单独的函数使用。
最初,我尝试过这个(solns 是 3D 数组的名称):
static int*** solns;
但是,虽然三重指针 solns 确实在函数之间存在,但我放置在其中的信息却没有。当第二个函数尝试访问第一个函数放在solns 中的数据时,这给了我一个段错误。
我应该如何声明才能保留里面的信息?我试过了
static int solns[][][];
除其他外,但 gcc 不喜欢我尝试的其他任何东西。
编辑:函数 1 中的这个 sn-p 代码将数据放入数组中:
solns[k] = realloc(solns[k],sizeof(solns[k])/sizeof(int*)+sizeof(int*));
solns[k][l] = realloc(solns[k][l],sizeof(int)*4*sC);
for(i=0;i<sC*4;i++)
{
solns[k][l][i] = row[i];
}
l++;
这个 sn-p 是函数 2 尝试读取该数据的地方:
if(solns[i][j][m*4+1]!=solns[i+1][n][m*4+2])
break;
但是solns[i] 在那个时候是一个空指针,因为solns 指向的数据不会继续。
【问题讨论】:
-
请展示一个能重现您的问题的最小代码示例。
-
@MichaelFoukarakis 好的,完成。希望在没有附加代码的情况下它是有意义的。
-
你还没有做过傻事,比如定义一个同名的函数局部变量吗?
-
这不是您要声明的 3D 整数数组。这是对这种事情的模拟,如果可以的话,你应该在现代 C 中避免这种情况,并且只分配连续的数组。
-
你有没有为solns分配内存?我可以看到你为 solns[k] 和 solns[k][l] 分配,但从来没有为 solns 本身分配。
标签: c pointers multidimensional-array global-variables declaration