visual c++多个智能指针分配导致崩溃
visual c++ multiple smart pointers allocation cause crash
您的系统可能需要不同的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::string
和std::to_string
:
make_unique<string>("pointer " + to_string(i));
// ~~~~~~~~~~~^
相关文章:
- c++11:在VS2015中分配全局STL "map<string, string>" initializer_list崩溃
- 分配内存并在回调时调用C++的 Rust 函数崩溃
- STD :: FSTREAM在使用预先分配的内存时在Main之后崩溃
- 当我尝试将一个向量元素的值分配给另一个向量元素时,为什么我的应用程序会崩溃
- 在崩溃时释放分配的指针的正确方法
- PCL发布构建崩溃而无法分配
- 当我释放由CFFI生成的DLL分配的char*时,为什么我的应用程序会崩溃
- 为什么在复制构造函数中分配联合成员会崩溃
- 在构造函数[C ]中的FP分配上崩溃
- 矢量未正确擦除内容(复制分配运算符的量运行直到崩溃 [BEX])
- 程序在解除分配字符数组时崩溃
- 删除在不同函数中动态分配的对象时崩溃
- 如果在进程崩溃后在进程中分配内存,会发生什么情况
- CComPtrBase::~解除分配智能指针时,CComPtr Base崩溃
- 删除矢量元素指向的已分配内存会导致程序崩溃
- 矩阵分配导致崩溃
- QString分配崩溃
- 通用内存分配崩溃,用于覆盖C++中的新建和删除
- 渲染脚本分配崩溃
- 使用std::wstring导致堆内存分配崩溃