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

标签 c++

我有一个用于分配的测试应用程序,我必须将共享指针 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/

相关文章:

c++ - 具有两个串联线程的 OpenMP 填充数组

c++ - 我正在编写一个代码来将一个 int 数组存储在一个文件中,然后在 C++ 中检索它,但是在检索第一项时是虚假值,我该如何解决这个问题?

c++ - 使用++ 运算符递增 map<string, int>

c++ - 如何在windows中直接在屏幕上绘图?

c++ - 将 C++ 编译成可移植的 linux 二进制文件

c++ - 读取数据库/文件中的不同数据类型(C++中的文件处理)

c++ - 如何使用模板继承和组件

c++ - 由 placement-new 创建的普通类型的生命周期从什么时候开始?

c++ - 模板函数和非模板函数的调用顺序

c++ - 将对象嵌入到链表c++