用C语句声明全局多维数组

时间:2013-02-18 07:45:47

标签: c pointers multidimensional-array global-variables declaration

所以,我试图全局声明一个三维整数数组,以便它可以被两个独立的函数使用。

最初,我试过这个(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指向的数据不会延续。

2 个答案:

答案 0 :(得分:3)

在全局范围内使用术语static时,意味着该对象/变量的实例对于每个编译单元都是本地的。

这意味着每个.cpp文件将具有上述变量的不同版本。因此,如果您的函数位于2个不同的文件中,则无法正常工作。

要解决此问题,请在.cpp文件中定义此变量,并在头文件中将其声明为extern

答案 1 :(得分:1)

如果使用static int ***solns,则必须为阵列分配内存。在这种情况下分配的所有内容都是指向保存int **的内存地址的指针的空间。如果您使用static int solns[][][],则需要提供static int solns[4][5][3]

等尺寸