visual c++多个智能指针分配导致崩溃

visual c++ multiple smart pointers allocation cause crash

本文关键字:分配 崩溃 指针 智能 c++ visual      更新时间:2023-10-16

您的系统可能需要不同的maxPointers值,但分配许多unique_ptr会导致此应用程序崩溃和烧录。删除s的定义和cin操作为指针分配提供了更多空间。

使用MSVC 2015。

那么,它为什么会崩溃以及如何避免呢?

谢谢。

#include <iostream>
#include <vector>
#include <string>
#include <memory>
using namespace std;
int main(int argn, const char*argv[])
{
    int maxPointers = 37900;
    vector<unique_ptr<string>> pointerHolder;
    for (int i = 0; i < maxPointers; i++)
    {
        pointerHolder.push_back(make_unique<string>("pointer " + i));
    }
    cout << "done creating "<< maxPointers << " pointers" << endl;
    string s;
    cin >> s;
    for (int i = 0; i < maxPointers; i++)
    {
        pointerHolder.at(i).release();
    }
    pointerHolder.clear();
    cout << "done releasing " << maxPointers << " pointers" << endl;
    return EXIT_SUCCESS;
}

您遇到的崩溃是因为您从调用"pointer " + i产生的垃圾中构建字符串。如果您打算将文字"pointer"与一个整数连接,那么您需要首先将该整数转换为std::stringstd::to_string

make_unique<string>("pointer " + to_string(i));
//                               ~~~~~~~~~~~^