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

堆内存分配不到,如何防范或增加堆,或者有别的原因引起。
类似以下例子,点击按钮程序就退出。
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