我正在尝试从文件中读取数据,但收到 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/