c++ - 变量 'dim'(不是数组)周围的堆栈已损坏

标签 c++ visual-studio-2010 fstream corrupt

我正在尝试使用 fstream 从一个二进制文件中读取一些我之前写在那里的数据。

问题是在函数结束后显示了主题中的消息

代码如下:

ifstream in("contrib.bin", ios::in | ios::binary );

char *nume, dim;
in.read((char*)&dim, sizeof(int));
nume = new char[dim + 1];
in.read(nume, dim);
nume[dim] = '\0';
double imp;
in.read((char*)&imp, sizeof(double));

delete [] nume;

现在,我已经完成了作业并寻找了这个问题,但是遇到它的其他人有数组,而我的变量是一个简单的字符。

有人能给我指出正确的方向吗?

最佳答案

代码

char dim;
in.read((char*)&dim, sizeof(int));

定义一个 1 字节的字符,然后将 sizeof(int) 字节(可能大于 1)读入其中。这是无效的,可能会损坏您的堆栈。

如果您需要读取sizeof(int) 字节,请将dim 声明为int。否则,将您读取的字节数更改为 1。最好您还使用 sizeof(dim) 来确保您只读取与您提供的存储一样多的字节数:

in.read((char*)&dim, sizeof(dim));

关于c++ - 变量 'dim'(不是数组)周围的堆栈已损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14282378/

相关文章:

c++ - 使用 fstream 对象将文件中的信息存储到变量中

c++ - 延迟共享库的链接

c++ - 如何在 C++ 中同时连接 2 个 RFID 阅读器?

c++ - 用 C++ 编写 XML 的好方法是什么?

c++ - 如何将 GLEW 与 MinGW 一起使用

html - Visual Studio 2010 是否支持 HTML 5?

sql - 添加具有多个外键的约束

visual-studio-2010 - T4 "Compiling transformation: An assembly with the same identity ' ' has already been imported. Try removing one of the duplicate references."?

C++ ifstream getline 不工作

C++:从文件中读取并显示单个项目