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

Cri*_*ina 2 c++ fstream corrupt visual-studio-2010

我正在尝试使用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;
Run Code Online (Sandbox Code Playgroud)

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

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

sim*_*onc 13

代码

char dim;
in.read((char*)&dim, sizeof(int));
Run Code Online (Sandbox Code Playgroud)

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

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

in.read((char*)&dim, sizeof(dim));
Run Code Online (Sandbox Code Playgroud)

  • 它*可能*破坏堆栈.据我们所知,它也可以让计算机飞过房间.;-) (4认同)
  • "读取4个字节"不一定是真的,因为sizeof(int)以多于一个的方式依赖于平台(字节的大小和用于int的位数). (2认同)

Luc*_*ore 7

in.read((char*)&dim, sizeof(int));是不正确的,dim只保留sizeof(char)一个,但你试图读sizeof(int)入它.

此后所有手套都关闭.