为什么for(int i=0;i <1000;i++)提示内存不足?

代码如下: 
头文件中结构体如下: 
struct ListInfo 

// int id; //ID号 
char* protocol; //协议类型 
char* s_ip_port; //源IP地址和端口 
char* d_ip_port; //目的IP地址和端口 
int length; //长度 
char* elseInfo; //其他信息 
}; 
函数定义如下: 
void CTestMemoryMFCDlg::OnBtnTest() 

// TODO: Add your control notification handler code here 
CString strInfo; 
char ch[2]; 
ListInfo* Info=new ListInfo; 
for(int i=0;i <1000;i++) 


Info->d_ip_port="12345"; 
Info->elseInfo="else"; 
Info->length=12; 
Info->protocol="tcp"; 
Info->s_ip_port="54321"; 
itoa(i+1,ch,10);//数字转换成字符串 
m_InfoList.InsertItem(i,ch); 
strInfo.Format("%s",Info->protocol); 
m_InfoList.SetItemText(i,1,strInfo); 
strInfo.Format("%s",Info->s_ip_port); 
m_InfoList.SetItemText(i,2,strInfo); 
strInfo.Format("%s",Info->d_ip_port); 
m_InfoList.SetItemText(i,3,strInfo); 
strInfo.Format("%d",Info->length); 
m_InfoList.SetItemText(i,4,strInfo); 
strInfo.Format("%s",Info->elseInfo); 
m_InfoList.SetItemText(i,5,strInfo); 

delete Info; 

for(int i=0;i <1000;i++)时提示内存不足.而为for(int i=0;i <999;i++)时就没错... 
很郁闷...请高手帮忙

狐的传说
浏览 140回答 1
1回答

交互式爱情

你在char ch[2];这一句中为项目编号字符串分配的数组空间太小了,事件上它只能容纳个位数。虽然往里面放一个三位数(如999)也没有报错,但实际上你的程序的堆栈已经被破坏了。当往里面放一个四位数时,程序终于报错了。把char ch[2];改成char ch[10];就可以了。或者不用itoa函数,把itoa(i+1,ch,10);//数字转换成字符串&nbsp;m_InfoList.InsertItem(i,ch);&nbsp;改成strInfo.Format("%d",i+1);m_InfoList.InsertItem(i,strInfo);也可以
打开App,查看更多内容
随时随地看视频慕课网APP