gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 08:44:23 24 4
gpt4 key购买 nike

我正在尝试初始化一个空的二维指针数组,该数组指向我创建的称为“节点”的数据结构。出于某种原因,当我尝试修改列表时遇到了这个范围问题,这是程序的关键部分。一个名为“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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com