hur.cn - 华软网

 热门搜索

堆内存分配不到,如何防范或增加堆,或者有别的原因引起。

  作者:未知    来源:网络    更新时间:2011/8/14
类似以下例子,点击按钮程序就退出。
C++">
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++">

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 
---华软网友回复---
设置成0x5f5e100,例子程序没问题,点按钮不会退出程序了。

但实际程序还是一样的。有没有类似设置堆的地方呢?
---华软网友回复---
刚才设置的应该叫做栈,堆是无法设置的,new操作符是在堆中申请内存,32位windows系统,虚拟4G内存,除了栈,程序镜像,全局变量等等,剩下的大部分都可以算作堆,但局部变量是栈中申请内存的      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。