c - 程序未在 C 中初始化外部变量

标签 c

我正在尝试初始化一个空的二维指针数组,该数组指向我创建的称为“节点”的数据结构。出于某种原因,当我尝试修改列表时遇到了这个范围问题,这是程序的关键部分。一个名为“repository_init”的函数应该真正初始化数组。但是,我在其他函数中使用了数组,这就是我收到错误的原因。它无法识别数组的存在。我是 C 的新手,但在做了一些研究后,我在“extern”上发现了一些东西,该网站告诉我可以使用 extern 来声明一个空变量。因此,我通过将列表放在 main 之前并像这样编写它来将列表声明为全局变量:

    extern node *main_list[][];
    #define MAX_LEVEL 10000

这里是 repository_init() 函数:

     void repository_init(int p){
         int new;
         new  = (max_range/2) + 5;
         max_height = 1;
         while(new > 1){
            new = (new * probability)/100;
            max_height++;
         }

         main_list[max_height][MAX_LEVEL];

         /*fill the array with empty values*/
     }

错误输出到屏幕是“错误:数组类型有不完整的元素类型

外部节点 *main_list[][];"

我需要这个列表是全局的。我不明白仅在单独的函数中初始化数组有什么问题。我已经用其他语言做过很多次了。

最佳答案

问题有两个:第一个是 main_list 的声明不完整,正如编译器告诉您的那样。声明数组时需要数组的大小。第二个问题是使用这个不完整数组的表达式 main_list[max_height][MAX_LEVEL];。它不设置大小,而是尝试访问数组。

在您的情况下,最好通过指向指针的指针来解决。有点像

extern node ***main_list;

...

main_list = malloc(sizeof(node **) * max_height);
for (size_t i = 0; i < max_height; ++i)
    main_list[i] = malloc(sizeof(node *) * MAX_LEVEL);

关于c - 程序未在 C 中初始化外部变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22266640/

相关文章:

c - 从 .txt 文件中读取数字并将它们存储在 C 中的数组中

c - 3 字节有符号值到 4 字节有符号值

c++ - 比较两个数组

c - 从连接到 UART 的 AXI 接收值

c - 从终端读取 input.txt 文件和 output.bmp 文件(C 编程)

c - 为什么我的函数会打印此语句?

C将数字列表读入多个数组

c - GNU 对共享库中定义的函数进行 undefined reference

c - 如何在 C 中创建结构体文字的数组文字?

c++ - 绘画后winapi窗口不刷新