我是C ++的初学者,一整天都在寻找我的错误,但我找不到它。 我想创建一个动态数据结构并在其中添加一些元素。但我的第一种方式不起作用,我无法找到原因。
我现在有2个案例。一个有效,一个失败。我知道我可以使用第二种方式而不是问这个问题,但我认为我真的不了解重要的事情,我相信我会再次犯同样的错误。
所以这里是代码:
struct a{
int count;
int value;
a* first;
a* next;
};
失败案例(第一条道路):
int main(){
a alist = { 0, 12, NULL, NULL }; //init the first one
alist.first = &alist;
for (int i = 0; i < 20; i++){ //creat some dyn. linked structures
if (alist.next == NULL){
alist.next = new a;
alist.next->count = i;
alist.next->first = alist.first;
alist.next->next = NULL;
alist.next->value = 12; //just a test value
alist = *(alist.next);
}
}
alist = *(alist.first); //reset to start from the beginning
cout << "count of created Structs:" << endl;
for (int i = 0; i < 20; i++){ //show count if structs exists
if (alist.next != NULL){
cout << "_" << i << endl;
alist = *(alist.next);
}
}
return 0;
}
输出:
count of created Structs:
工作案例:
int main(){
a* alist = new a{ 0, 12, NULL, NULL }; //init the first one
alist->first = alist;
for (int i = 0; i < 20; i++){ //creat some dyn. linked structures
if (alist->next == NULL){
alist->next = new a;
alist->next->count = i;
alist->next->value = 12; //just a test value
alist->next->first = alist->first;
alist->next->next = NULL;
alist = alist->next;
}
}
alist = alist->first; //reset to start from the beginning
cout << "count of created Structs:" << endl;
for (int i = 0; i < 20; i++){ //show countnumber if structs exists
if (alist->next != NULL){
cout << "_" << i << endl;
alist = (alist->next);
}
}
return 0;
}
输出:
count of created Structs:
_0,_0,_1,_2,_3,..._19
答案 0 :(得分:3)
声明
alist = *(alist.next);
在每个循环迭代中使用列表中的alist
链接覆盖本地对象next
。在最后一次迭代中,它使用next
为NULL
的对象进行设置。每个对象的first
指针都指向被覆盖的本地对象。当您尝试显示创建的结构时,检查next
是否为NULL
的第一个评估将失败。
第二个版本没有覆盖,因为您使用的是指针赋值而不是对象复制。