堆内存分配不到,怎么防范或增加堆,或者有别的原因引起
堆内存分配不到,如何防范或增加堆,或者有别的原因引起。
类似以下例子,点击按钮程序就退出。
具体情况是以下代码,m_pPro_info[i].ProjectNum=strText;
m_pPro_info[i].ProjectNum 先释放内存然后再分配内存,通常都是在第2次循环时,最后HeapAlloc()返回0X00000000;
按道理不应该出现这种情况的。
打开程序,连接USB传输数据,然后程序自动退出。
源代码不是自己的,只改了传输部分。
问一下,有人碰到过吗?
如何防范或增加堆,或者有别的原因引起?
------解决方案--------------------
CString str[1000000];这里是使用的Stack的,
默认的Stack一般是1M,超过后,debug版程序可能报错,可以更改Stack的默认大小:
vc6如下:
ProjectSetting - link - output - Stack allocations
类似以下例子,点击按钮程序就退出。
- C/C++ code
void CTestView::OnButtonTest() { // TODO: Add your command handler code here char strText[5]={"HZWP"}; CString str[1000000]; for (int i=0;i<1000000;i++) { strText[0]='1'; strText[1]='2'; strText[2]='3'; strText[3]='4'; strText[4]='\0'; str[i]=strText; } }
具体情况是以下代码,m_pPro_info[i].ProjectNum=strText;
m_pPro_info[i].ProjectNum 先释放内存然后再分配内存,通常都是在第2次循环时,最后HeapAlloc()返回0X00000000;
- C/C++ code
char strText[5]={"1234"}; for (i=0;i<m_TotalPro;i++) { strText[0]=asci[m_DataArray.GetAt(nCur)]; strText[1]=asci[m_DataArray.GetAt(nCur+1)]; strText[2]=asci[m_DataArray.GetAt(nCur+2)]; strText[3]=asci[m_DataArray.GetAt(nCur+3)]; strText[4]='\0'; m_pPro_info[i].ProjectNum=strText; //i=2时; 断点跟进,HeapAlloc() 返回NULL; //曾经i=4是出错 m_pPro_info[i].MinDia=255; m_pPro_info[i].MaxDia=0; if(strText[0]=='H')
按道理不应该出现这种情况的。
打开程序,连接USB传输数据,然后程序自动退出。
源代码不是自己的,只改了传输部分。
问一下,有人碰到过吗?
如何防范或增加堆,或者有别的原因引起?
------解决方案--------------------
CString str[1000000];这里是使用的Stack的,
默认的Stack一般是1M,超过后,debug版程序可能报错,可以更改Stack的默认大小:
vc6如下:
ProjectSetting - link - output - Stack allocations