使用push_back方法获取智能指针矢量时应用崩溃

App crashing when using push_back method for a vector of smart pointers

本文关键字:应用 崩溃 指针 智能 push back 方法 获取 使用      更新时间:2023-10-16

我有一个作业的测试应用程序,我必须将共享指针push_back到共享指针的向量中。 但是它在push_back上崩溃了,我不知道为什么。

我尝试移动shared_ptr而不是将其复制到矢量,但仍然看到相同的问题。 我尝试调试该问题,但由于某种原因,单击变量后变量未显示在调试器中(可能的 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 调试消息,以尝试查看程序在此函数中失败的位置。 调用"创建的共享 PTR",但不调用"添加到向量"。

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

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