为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C++
狐的传说 2023-03-08 19:15:46
代码如下: 头文件中结构体如下: 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++)时就没错... 很郁闷...请高手帮忙
查看完整描述

1 回答

?
交互式爱情

TA贡献1712条经验 获得超3个赞

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

查看完整回答
反对 回复 2023-03-10
  • 1 回答
  • 0 关注
  • 101 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信