使用 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 的某些字段未显示在数据文件(无符号字符博士)上。也适用于 struct MNTDATSTRUCT 中的无符号字符区域
当我尝试运行代码时,Visual Studio 将停止在第 33 行(就在从 ReadAr 返回 0 之后),并弹出运行时错误消息:运行时检查失败 #2 - 变量“delta_c”周围的堆栈已损坏。 ",尽管在监视窗口中,MNTDATSTRUCT *p 已被属性填充。
我很好奇这种情况。谁能给我一些建议?
感谢您的帮助。