使用 For 创建结构进行初始化
Using For to create struct to initialize
你好,我有一个问题,我正在尝试使用包含列表的数组初始化哈希表,但是当我使用 for 循环时,所有数据都是 "shared"。我必须像这样初始化 mannualy :
struct objec_listt A,B; // Initialization of 2 two structure A and B
INIT_LIST_HEAD(&A.list); // A is headlist
INIT_LIST_HEAD(&B.list); // B is headlist
hashtable->tab[0]= &A; // I insert A into the array
hashtable->tab[1]= &B; // I insert B into the array
insert(1,tab[0]); // insert 1, not real syntax
insert(2,tab[0]); // insert 2
insert(3,tab[1]); // insert 3
现在我用我自己的函数打印 tab[0] 和 tab[1],我得到
标签[0] = 1,2
选项卡[2]= 3
好的,如我所愿
如果我喜欢它,那是行不通的:
for(i=0; i<2; i++)
{
struct objec_listt A;
INIT_LIST_HEAD(&A.list);
hashtable->tab[i] = &A
}
insert(1,tab[0]); // insert 1,
insert(2,tab[0]); // insert 2
insert(3,tab[1]); // insert 3
如果我做一个
打印:
选项卡[0] : 1,2,3
选项卡[1] : 1,2,3
所以问题就像我正在尝试创建 "many object" 它将成为列表的头部,并且对于每个
我需要初始化一个大小为 100 的数组,这就是为什么我要使用 loop
谢谢!
从评论继续,换句话说,您需要类似于以下内容以避免在 for
循环代码块中声明:
struct objec_listt A[2];
for(i=0; i<2; i++)
{
INIT_LIST_HEAD(&A[i].list);
hashtable->tab[i] = &A[i];
}
insert(1,tab[0]); // insert 1,
insert(2,tab[0]); // insert 2
insert(3,tab[1]); // insert 3
在您的示例中,当您在 for 循环块中声明 struct objec_listt A
时,A
仅在 {}
之间的块中具有生命周期。当 for 循环退出时,A
的内存被标记为已释放,然后您的程序可以再次使用它来满足它的任何需要——这不是您想要的。通过将声明移到 for 循环之外,您可以确保 A
在范围 中继续存在 直到您退出包含 A
.[=18= 的块]
你好,我有一个问题,我正在尝试使用包含列表的数组初始化哈希表,但是当我使用 for 循环时,所有数据都是 "shared"。我必须像这样初始化 mannualy :
struct objec_listt A,B; // Initialization of 2 two structure A and B
INIT_LIST_HEAD(&A.list); // A is headlist
INIT_LIST_HEAD(&B.list); // B is headlist
hashtable->tab[0]= &A; // I insert A into the array
hashtable->tab[1]= &B; // I insert B into the array
insert(1,tab[0]); // insert 1, not real syntax
insert(2,tab[0]); // insert 2
insert(3,tab[1]); // insert 3
现在我用我自己的函数打印 tab[0] 和 tab[1],我得到
标签[0] = 1,2
选项卡[2]= 3
好的,如我所愿
如果我喜欢它,那是行不通的:
for(i=0; i<2; i++)
{
struct objec_listt A;
INIT_LIST_HEAD(&A.list);
hashtable->tab[i] = &A
}
insert(1,tab[0]); // insert 1,
insert(2,tab[0]); // insert 2
insert(3,tab[1]); // insert 3
如果我做一个 打印:
选项卡[0] : 1,2,3
选项卡[1] : 1,2,3
所以问题就像我正在尝试创建 "many object" 它将成为列表的头部,并且对于每个 我需要初始化一个大小为 100 的数组,这就是为什么我要使用 loop
谢谢!
从评论继续,换句话说,您需要类似于以下内容以避免在 for
循环代码块中声明:
struct objec_listt A[2];
for(i=0; i<2; i++)
{
INIT_LIST_HEAD(&A[i].list);
hashtable->tab[i] = &A[i];
}
insert(1,tab[0]); // insert 1,
insert(2,tab[0]); // insert 2
insert(3,tab[1]); // insert 3
在您的示例中,当您在 for 循环块中声明 struct objec_listt A
时,A
仅在 {}
之间的块中具有生命周期。当 for 循环退出时,A
的内存被标记为已释放,然后您的程序可以再次使用它来满足它的任何需要——这不是您想要的。通过将声明移到 for 循环之外,您可以确保 A
在范围 中继续存在 直到您退出包含 A
.[=18= 的块]