Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1584305
  • 博文数量: 239
  • 博客积分: 1760
  • 博客等级: 上尉
  • 技术积分: 1595
  • 用 户 组: 普通用户
  • 注册时间: 2011-01-08 23:53
文章分类

全部博文(239)

文章存档

2016年(1)

2015年(28)

2014年(53)

2013年(42)

2012年(50)

2011年(65)

分类: WINDOWS

2014-09-21 23:08:39

今天在作项目时,遇到了这个问题,运行时报错:

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/
阅读(10867) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~