gpt4 book ai didi

c++ - std vector 中的 push_back() 崩溃

转载 作者:行者123 更新时间:2023-11-30 02:51:51 25 4
gpt4 key购买 nike

这个程序按预期工作:

#include <iostream>
#include <string>
#include <vector>
using namespace std;

struct Thumbnail
{
string tag;
string fileName;
};

int main()
{
{
Thumbnail newThumbnail;
newThumbnail.tag = "Test_tag";
newThumbnail.fileName = "Test_filename.jpg";

std::vector<Thumbnail> thumbnails;

for(int i = 0; i < 10; ++i) {
thumbnails.push_back(newThumbnail);
}
}
return 0;
}

如果我在另一个项目(仍然是单线程)中复制并粘贴主要代码块,在任何函数中,我从注释行 // <-- crash at the 2nd loop 得到这个异常:

terminate called after throwing an instance of 'std::bad_alloc'
what(): std::bad_alloc

如果我在任何 push_back 之前清除 vector,一切都很好(但这当然不是期望的行为);这让我觉得如果 vector 不能存储多个这样的对象。

这是代码崩溃的函数:

int ImageThumbnails::Load(const std::string &_path)
{
QDir thumbDir(_path.c_str());

if(!thumbDir.exists())
return errMissingThumbPath;

// Set a filter
thumbDir.setFilter(QDir::Files);
thumbDir.setNameFilters(QStringList() << "*.jpg" << "*.jpeg" << "*.png");
thumbDir.setSorting(QDir::Name);

// Delete previous thumbnails
thumbnails.clear();

Thumbnail newThumbnail;

///+TEST+++
{
Thumbnail newThumbnail;
newThumbnail.tag = "Test_tag";
newThumbnail.fileName = "Test_filename.jpg";

std::vector<Thumbnail> thumbnails;

for(int i = 0; i < 10; ++i)
{
TRACE << i << ": " << sizeof(newThumbnail) << " / " << newThumbnail.tag.size() << " / " << newThumbnail.fileName.size() << std::endl;
//thumbnails.clear(); // Ok with this decommented
thumbnails.push_back(newThumbnail); // <-- crash at the 2nd loop
}

exit(0);
}
///+TEST+END+++
...

这是输出:

> TRACE: ImageThumbnails.cpp:134:Load  
0: 8 / 8 / 17
> TRACE: ImageThumbnails.cpp:134:Load
1: 8 / 8 / 17
terminate called after throwing an instance of 'std::bad_alloc'
what(): std::bad_alloc

为什么我在两个不同的项目中对同一段代码会出现这种不同的行为?

平台:Windows 7、MinGW 4.4、GCC

最佳答案

要补充一点(因为第一个谷歌结果):在我的 szenario 中,我得到了 bad_alloc 即使我还有几 GB 的 RAM 可用。

如果您的应用程序需要超过 2GB 的内存,您必须在链接器设置中启用/LARGEADDRESSAWARE 选项。

如果您需要超过 4GB,您必须将构建目标设置为 x64(在项目设置和构建配置中)

由于 vector 自动调整大小的工作方式,您将在 ~1gb/~2gb vector 大小处遇到断点

关于c++ - std vector 中的 push_back() 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19428663/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com