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

标签 c++ file struct

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

相关文章:

c++ - 卸载 DLL 时的内存泄漏是否会导致主机进程发生泄漏?

c - 了解 TCL C API 中的结构

c# - 具有 C# 结构的生产者/消费者?

c++ - 未定义对友元运算符的引用

c++ - 是/否消息框使用 QMessageBox

c++ - Windows套接字随机接受和接收

c - 为什么我的 File.dat 不会被读取和运行,我如何将数据分配给结构? - C

c++ - 从目录中读取文件名

c++ - 来自文件的并发处理

c - 定义结构和类型定义的正确位置