gpt4 book ai didi

c++ - 无法打印指针 vector

转载 作者:行者123 更新时间:2023-11-28 04:08:39 24 4
gpt4 key购买 nike

我们有一些类,A 类具有如下所示的构造函数:

A::A(int num, bool boods, double diablo, std::vector<ClassB* > &c) {
createobj();
setNum(num);
setboods(boods);
setDiablo(diablo);
c= this->c; //Where c, is just a vector of pointer objects of class B
}

void A::createobj() {
E e("e", 59, 0, 100); //Where E is a derived class inherited from class B
B *e = &e;
c.push_back(e);
}

//Then over at main:

main() {
std::vector<ClassB* > c;
A a(100, true, 1.21, c);

std::cout << c.size(); //prints out 1 as expected...

for(auto i : c){
std::cout << i->getName() << std::endl; //instead of printing "e"
//I get this from the console
//�
//Segmentation Fault
}
}

我已经为此工作了 12 多个小时,非常感谢任何帮助,我会在你的婚礼上跳舞。

c vector 是在类 A 的 .h 中声明的私有(private)指针 vector 并且只包含 ClassB* 对象。

最佳答案

这是一个问题:

void A::createobj(){
E e("e", 59, 0, 100);
B *e = &e; // <-- Is this your real code? Anyway, the next line is bad also
c.push_back(e); // <-- The e is a local variable
}

您正在存储指向局部变量 e 的指针,因此当 createobj 返回时,e 不再存在。

一种解决方案是动态分配您的对象,然后您需要通过调用 delete 释放代码中某处的内存来正确管理它们的生命周期:

void A::createobj(){
E* e = new E("e", 59, 0, 100);
c.push_back(e); // <-- ok
}

关于c++ - 无法打印指针 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58262133/

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