簡體   English   中英

變量'dim'(不是數組)周圍的堆棧已損壞

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM