我在循环中声明结构时遇到了问题。这是我的代码:
struct v;
struct e{
e* next;
bool choosen;
v* target;
};
struct v {
e* start;
e* end;
bool choosen;
int skel; // how many edges in skeleton from this v
int number;
};
void add(v* v1, e* e1) {
if(v1->start==0) {
v1->start=e1;
v1->end=e1;
}else{
v1->end->next=e1;
v1->end=e1;
}
}
for(i=0;i<m;i++) {
cin>>t1>>t2;
e ed={0,false,&b[t2]};
add(&b[t1], &ed);
}
我需要在for循环的每个循环中创建新的struct e并传入方法add。问题是,它只是重新定义了值,但是对象结构是相同的。毕竟,只有指向相同结构的指针。有什么方法可以解决它吗?像新的宣言?
编辑:我已经添加了整个代码,以清楚我在使用指针做什么。答案 0 :(得分:1)
注意结构ed
仅在for-loop中有效,即它的可见性,所以如果你很幸运,你不会崩溃;
我建议使用:
for(i = 0; i < m; i++) {
cin >> t1 >> t2;
e* ed = new e();
ed->next = 0x00;
ed->choosen = false;
ed->target = &b[t2];
add(&b[t1], ed);
}
代替。不要忘记在从容器中取出元素时不再需要它们。