VC提示内存不足

来源:百度知道 编辑:UC知道 时间:2024/06/25 02:58:04
代码如下:
头文件中结构体如下:
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_

你在
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);
也可以