程序调试执行时报如下错误:
崩溃代码:
// 结构体定义
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; //释放内存
}
标签:strTag,getDayHisData,CHisDataOfOneDay,dayData,pPara,date,overflow,Stack From: https://blog.51cto.com/u_1923895/5939825