2

因此,我试图全局声明一个 3 维整数数组,以便两个单独的函数可以使用它。

最初,我尝试过这个(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不会结转。

4

2 回答 2

3

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

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

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

于 2013-02-18T07:47:04.517 回答
1

如果使用static int ***solns,则必须为数组分配内存。在这种情况下,分配的所有内容都是一个指向包含int **. 如果你使用static int solns[][][]你需要给一个大小,如static int solns[4][5][3]

于 2013-02-18T08:03:21.977 回答