代碼如下: 頭文件中結構體如下: 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);
也可以
- 1 回答
- 0 關注
- 129 瀏覽
添加回答
舉報
0/150
提交
取消