c ++多个智能指针分配导致崩溃
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));
// ~~~~~~~~~~~^
您的系统的 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));
// ~~~~~~~~~~~^