gpt4 book ai didi

c++ - 读取文件时字符缓冲区溢出

转载 作者:行者123 更新时间:2023-11-27 23:53:48 25 4
gpt4 key购买 nike

我正在尝试从文件中读取数据,但收到 STATUS_STACK_BUFFER_OVERRUN 错误并且应用程序崩溃了。

我有一个结构:

struct BSPEntities
{
char* ents;
};

我正在阅读文件:

BSPEntities entities
ifstream mapfile;
int size = 54506;
int offset = 5182600;

entities.ents = new char[size];
mapfile.seekg(offset, ios::beg);
mapfile.read((char *)(&entities.ents), size);

“size”和“offset”是从文件中加载的已知有效值。我有预处理器指令 #pragma pack(1) 和 #pragma push BSPEntities 结构。

谢谢。

最佳答案

&entities.ents 是指向 char 的指针。指向的对象(指向 char 的指针)可能只有 4 或 8 个字节,具体取决于您的目标体系结构,但您正试图向其写入 54,506 个字节。显然 54,506 大于 8,所以您写的越过指针末尾,行为未定义。

读取应该只是 mapfile.read(entities.ents, size);

此外,您无需在此处乱用 #pragma pack,除非发生了您未显示的更复杂的事情。

关于c++ - 读取文件时字符缓冲区溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44191623/

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