gpt4 book ai didi

c++ - 对智能指针 vector 使用 push_back 方法时应用程序崩溃

转载 作者:太空宇宙 更新时间:2023-11-04 12:33:24 25 4
gpt4 key购买 nike

我有一个用于分配的测试应用程序,我必须将共享指针 push_back 到共享指针 vector 中。但是它在 push_back 上崩溃了,我不确定为什么。

我尝试移动 shared_ptr 而不是将其复制到 vector ,但我仍然遇到同样的问题。我试图调试这个问题,但由于某种原因,在我单击变量后,变量没有显示在调试器中(可能是 IDE 问题)。我确实在堆栈溢出上看到了类似的问题,但这不是同一个问题,因为在调用 push_back 之前正在初始化共享指针。

//Fill - will loop through and ask the user what elements to add
void fill(std::vector<std::shared_ptr<Test>> &vec, int num)
{
for(int i {1}; i <= num; i++)
{
std::cout << "Enter data pointer [" << i << "] : ";
int data {};
std::cin >> data;
std::shared_ptr<Test> data_ptr = std::make_shared<Test> (data);
std::cout << "Created shared pointer for " << data_ptr->get_data() <<
std::endl; //debug
vec.push_back(std::move(data_ptr));
std::cout << "Added to vector" << data_ptr->get_data() << std::endl;
//debug (crash issue is with the pushback method)
}
}

创建 shared_ptr 后 push_back 方法似乎没有执行时程序崩溃。我添加了 cout 调试消息来尝试查看该函数中程序失败的位置。调用“created shared ptr”,但不调用“Added to vector”。

最佳答案

当您从 shared_ptr 移动时,移动自变量无效(在本例中为 null)。

在推送之前调用 data_ptr->get_data(),这很好。但是在你按下(通过移动)调用 data_ptr->get_data() 之后,第二次将使用(现在移动的)智能指针 - 因此你的崩溃。

关于c++ - 对智能指针 vector 使用 push_back 方法时应用程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57618718/

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