所以,我试图全局声明一个三维整数数组,以便它可以被两个独立的函数使用。
最初,我试过这个(solns
是3D数组的名称):
static int*** solns;
但是虽然三重指针solns
确实在函数之间存在,但我放在其中的信息却没有。当第二个函数试图访问第一个函数放在solns
中的数据时,这会给我一个段错误。
我应该如何声明内部信息?我试过了
static int solns[][][];
除此之外,gcc不喜欢我尝试的其他任何东西。
编辑:来自函数1的这段代码将数据放入数组中:
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++;
此代码片段是函数2尝试读取该数据的地方:
if(solns[i][j][m*4+1]!=solns[i+1][n][m*4+2])
break;
但solns[i]
是该点的空指针,因为solns
指向的数据不会延续。
答案 0 :(得分:3)
在全局范围内使用术语static
时,意味着该对象/变量的实例对于每个编译单元都是本地的。
这意味着每个.cpp
文件将具有上述变量的不同版本。因此,如果您的函数位于2个不同的文件中,则无法正常工作。
要解决此问题,请在.cpp
文件中定义此变量,并在头文件中将其声明为extern
。
答案 1 :(得分:1)
如果使用static int ***solns
,则必须为阵列分配内存。在这种情况下分配的所有内容都是指向保存int **
的内存地址的指针的空间。如果您使用static int solns[][][]
,则需要提供static int solns[4][5][3]