C を使用してファイルを読み取ると、奇妙な実行エラーが発生しました。エラー メッセージは、「実行時チェックの失敗 #2 - 変数 'delta_c' の周りのスタックが壊れています」です。私はビジュアルスタジオ2010を使用しています
これは、私がエラーを実行しているコードの簡略化されたバージョンです(この簡略化されたバージョンでも実行エラーが発生しました)
#include "stdafx.h"
typedef struct {
unsigned short dx;
unsigned short dy;
unsigned char dr;
unsigned short ext;
unsigned char delta_c;
} Delta;
typedef struct {
unsigned char region;
unsigned char delta_num;
Delta delta[8];
} MNTDATSTRUCT;
int ReadAr(const char* mntfile, MNTDATSTRUCT *p)
{
FILE *fp = fopen(mntfile, "r");
fscanf(fp, "%u",&p->delta_num);
for (int i=0; i<p->delta_num; ++i) {
unsigned short dx, dy, ext;
unsigned char delta_c;
fscanf(fp,"%u%u%u%u", &dx, &dy, &ext, &delta_c);
p->delta[i].dx = dx;
p->delta[i].dy = dy;
p->delta[i].ext = ext;
p->delta[i].delta_c = delta_c;
}
fclose(fp);
return 0;
}
int main()
{
MNTDATSTRUCT p;
ReadAr("F:\\projects\\test_c++\\Debug\\tt.bpm",&p);
return 0;
}
読み取る予定のデータ ファイル (tt.bpm) は次のようになります。
1
1 2 10 13
何らかの理由で、構造体 Delta の一部のフィールドがデータ ファイル (unsigned char dr) に表示されないことに注意してください。構造体 MNTDATSTRUCT の unsigned char 領域にも
コードを実行しようとすると、Visual Studio が 33 行目 (ReadAr から 0 を返した直後) で停止し、ランタイム エラー メッセージが表示されます。 "、しかし、ウォッチ ウィンドウでは、MNTDATSTRUCT *p はプロパティが入力されています。
この状況が気になります。誰か私にいくつかの提案をしてもらえますか?
助けてくれてありがとう。