今天在作项目时,遇到了这个问题,运行时报错:
Run-Time Check Failure #2 - Stack around
the variable 'cinfo' was corrupted
。网上找资料,大部分解决方法说的是,project->配置属性->c/c++->代码生成->基本运行时检查
改为默认值。这样改了虽然不报错,却没有出现预料的结果,所以并没有实际解决问题。最后在一个论坛上找到了解决方法,大概意思是,VS对栈的大小有限制,RANGE结构体太大,VS的栈溢出,故报错。
解决方法:
将RANGE改为类成员变量。
另据网上说可以用new来处理,不过我试验的结果还是报错。
附一些说明代码:
typedef struct {
char
NetCode[5]; //台网代码
char StaCode[10]; //台站代码
int
Range[3]; //3通道量程
int Offset[3]; //3通道偏移
} RANGE;
以下方式会产生报错:
STDMETHODIMP CRailLineView::SetWaveRange(long
lStation, VRANGE NewRange)
{
USES_CONVERSION;
RANGE range;//栈上变量
ZeroMemory(&range,
sizeof(TRIGGER));
strcpy(range.NetCode, "CD");
strcpy(range.StaCode,
"S01");
range.Offset[0] = 0;
range.Offset[1] = 0;
range.Offset[2] = 0;
range.Range[0] = 1000;
range.Range[1] = 1000;
range.Range[2] = 1000;
SetRange(1,range);
return S_OK;
}
//以下是修改后能正确运行的代码
STDMETHODIMP CRailLineView::SetWaveRange(long
lStation, VRANGE NewRange)
{
USES_CONVERSION;
strcpy(m_Range.NetCode,
"CD");//m_Range是类成员变量
strcpy(m_Range.StaCode, "S01");
range.Offset[0] = 0;
range.Offset[1] = 0;
range.Offset[2] = 0;
range.Range[0] = 1000;
range.Range[1] = 1000;
range.Range[2] = 1000;
SetRange(1,m_Range);
OutputDebugString(_T("SetWaveRange"));
return
S_OK;
}
转载自:http://blog.163.com/wslngcjsdxdr@126/blog/static/162196230201092833721844/