【问题标题】:Declaring a Global Multidimensional Array in C在 C 中声明一个全局多维数组
【发布时间】: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


【解决方案1】:

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

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

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

【讨论】:

  • 我明白你在说什么,但两个函数都在同一个文件中,所以我认为这不适用。
  • .cpp 文件用于 C++ 而不是 C
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2023-03-25
    • 1970-01-01
    • 2012-10-04
    • 1970-01-01
    • 2012-12-11
    • 2018-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多