`
tcspecial
  • 浏览: 897748 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Stack overflow

阅读更多

     程序调试执行时报如下错误:

   stack overflow

 

    崩溃代码:

// 结构体定义
typedef struct
{
	// 数据条目个数
	int iCount;

	// 数据条目数组,按1s频率采样, 86400个数据
	CHisDataItem data[60*60*24];
} CHisDataOfOneDay;

// 崩溃语句
if(pFuncName=="getDayHisData") 
{

	QString strTag=pPara[0].toString();
	QDate date=pPara[1].toDate();
	// 真正引起崩溃的核心代码在此,这个为容纳一天数据的结构体,导致栈区空间不足
	CHisDataOfOneDay dayData; 
	bool status=m_pDb.getDayHisData(strTag,date,dayData);
}

 

       栈区空间比较有限,当代码中有很大变量时或者执行N次循环时,分配大量的变量, 很容易导致栈空间用尽,程序崩溃;

    解决方案:1. 直接在vs加大栈空间,此方案治标不治本,不推荐 2.直接在堆上分配变量,用完后释放

 

   解决方案2:

if(pFuncName=="getDayHisData") 
{

	QString strTag=pPara[0].toString();
	QDate date=pPara[1].toDate();
	CHisDataOfOneDay *dayData=new CHisDataOfOneDay; //堆上分配该变量
	bool status=m_pDb.getDayHisData(strTag,date,*dayData);
	delete dayData; //释放内存
}

 

 

  • 大小: 10.3 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics