我正在尝试使用 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/