繁体   English   中英

读取文件时字符缓冲区被溢出

[英]Character buffer being overrun while reading file

我正在尝试从文件中读取数据,但是出现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);

“大小”和“偏移”是从文件加载的值,并且已知有效。 我有预处理程序指令#pragma pack(1)和#pragma push BSPEntities结构。

谢谢。

&entities.ents是指向char的指针。 根据所针对的体系结构,指向的对象(指向char的指针)可能只有4或8个字节,但您尝试向其写入54,506字节。 显然54,506大于8,因此您正在写指针的末尾,并且行为未定义。

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

同样,您无需在这里#pragma pack ,除非发生了一些更复杂的事情且没有显示。

mapfile.read((char *)(&entities.ents), size);

应该

mapfile.read(entities.ents, size);

而不是传递ents指向的堆内存块的地址,而是传递ents本身的地址。 而且由于ents是在堆栈上分配的,因此您要在堆栈上读取字节,直到溢出为止。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM