[英]Stack around the variable 'dim'(not an array) was corrupted
我正在嘗試使用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字節的char然后讀入sizeof(int)
字節(可能大於1)。 這是無效的,可能會損壞您的堆棧。
如果需要讀取sizeof(int)
字節,請將dim
聲明為int
。 否則,將讀取的字節數更改為1.最好還使用sizeof(dim)
來確保只讀取為您提供的存儲空間的字節數:
in.read((char*)&dim, sizeof(dim));
in.read((char*)&dim, sizeof(int));
不正確, dim
只保存sizeof(char)
,它只是一個,但你試圖將sizeof(int)
讀入其中。
此后所有手套都關閉。
那么你定義一個字符,然后讀取int的大小。 這將是第一個問題
char *nume, dim;
in.read((char*)&dim, sizeof(char));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.