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

时间:2013-01-11 16:25:55

标签: 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;

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

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

3 个答案:

答案 0 :(得分:13)

代码

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

定义一个1字节的char然后读入sizeof(int)个字节(可能大于1)。这是无效的,可能会破坏您的筹码。

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

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

答案 1 :(得分:7)

in.read((char*)&dim, sizeof(int));不正确,dim仅保留sizeof(char),但您尝试将sizeof(int)读入其中。

此后所有手套都关闭。

答案 2 :(得分:2)

你定义一个字符,然后读取int的大小。这将是第一个问题

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