erk*_*kus 3 c++ stdvector visual-c++
我正在尝试使用同一类的后代来创建类,以创建树,但是当我尝试访问vector的indeode时,它将永远无法工作。我尝试访问字符串时遇到异常:std :: length_error。
#include <iostream>
#include <vector>
#include <string>
using namespace std;
class A {
public:
string name;
vector<A*> children;
};
int main()
{
A cl;
cl.name= "HI!";
for(int i = 0; i < 10;i++) {
A newCl;
newCl.name= "World!";
cl.children.push_back(&newCl);
}
for(int i = 0; i < 10;i++) {
// error here:
cout << cl.children[i]->name << endl;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
有谁知道用C ++制作树的更简单方法,或者如何解决这个问题?
问题在这个循环中
for(int i = 0; i < 10;i++) {
A newCl;
newCl.name= "World!";
cl.children.push_back(&newCl);
}
Run Code Online (Sandbox Code Playgroud)
该变量newCl将在迭代结束时不复存在,并且您将其地址插入向量中。当您访问它时,您正在访问一个悬空指针,这是未定义的行为,您的程序可能会崩溃,产生垃圾或介于两者之间的任何东西。
您可以按照Oblivion的建议使用堆分配,但是在这种情况下,您可能需要考虑使用智能指针进行内存管理。
否则,您可以使用std::vector<A>C ++ 17中的值向量而不是指针(有关更多详细信息,请参见:如何声明同一类的成员向量?)
编辑:我澄清了std::vector<A>Chipster评论后的用法。
| 归档时间: |
|
| 查看次数: |
77 次 |
| 最近记录: |