gpt4 book ai didi

C++ 清除结构 vector 异常

转载 作者:太空宇宙 更新时间:2023-11-04 15:12:29 26 4
gpt4 key购买 nike

我定义了一个名为 Part 的结构:

struct Part
{
std::string id;
double area;
double volume;

bool operator==(const Part& part) const
{
return (area == part.area) && (volume == part.volume);
}

bool operator!=(const Part& part) const
{
return !operator==(part);
}

bool operator<(const Part &part) const
{
return (area + volume) < part.area + part.volume;
}
};

我创建了一个零件 vector 并将该 vector 保存在一个二进制文件中。然后我将二进制文件读入一个 vector 。我确认所有部分都已正确读入 vector 。我读取二进制文件的函数是:

static bool restore_vector_from_file(const char* fileName, std::vector<Part> &parts) {

std::ifstream instream(fileName, std::ios::in | std::ios::binary);

if (!instream) {
return false;
}

instream.seekg(0, instream.end);
int bytes = instream.tellg();
instream.seekg(0, instream.beg);

int vector_size = bytes / sizeof(Part);
parts.resize(vector_size);
instream.read(reinterpret_cast<char*>(parts.data()), bytes);

if (!instream)
{
return false;
}

instream.close();
return true;
}

我的主要功能是:

int main(int argc, char *argv[])
{
if (argc != 3)
{
std::cout << "Number of arguments must be 3" << std::endl;
return 1;
}

// Load parts with properties to a vector
const char* folderName = argv[1];
const char* vectorFileName = argv[2];

std::vector<Part> partArray;

// Load from pre-saved file to save time
if (!restore_vector_from_file(vectorFileName, partArray))
{
std::cout << "Failed to retore vector from file" << std::endl;
return 1;
}
partArray.clear();
return 0;
}

一切正常,直到我尝试清除 partArray。它抛出异常:

Exception thrown: read access violation.
_Pnext was 0x1BC586CCB48.

即使我删除 partArray.clear(),当 return 0;

时也会抛出相同的异常

请帮忙。

最佳答案

您的结构 Part 不是 POD type而不是 trivial ,因此您无法像现在这样保存或加载它。

以它的 id 成员为例,一个 std::string 对象通常包含一个 pointer ,它是被保存的。该指针在任何其他进程中都无效。

您需要使用 serialization保存和加载您的结构。

关于C++ 清除结构 vector 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50373112/

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