4
回答
为什么不能free啊?
利用AWS快速构建适用于生产的无服务器应用程序,免费试用12个月>>>   
#include <afx.h>
void main()
{
CString str="11223344";
char *pc;
int len=str.GetLength();
pc=(char *)malloc(sizeof(char)*len+1);
for(int i=0;i<len;i++)
{
*pc++=str.GetAt(i);
}
free(pc);///////////////////////////////运行报错
pc=NULL;
}
<无标签>
举报
xxdd
发帖于5年前 4回/370阅
共有4个答案 最后回答: 5年前

*pc++=str.GetAt(i);  

这句会导致pc向后面移动了。你释放的是野指针。可以改为:

#include <afx.h> 
void main() 

CString str="11223344"; 
char *pc ,*pTemp;  //加一个临时指针;
int len=str.GetLength(); 
pc=(char *)malloc(sizeof(char)*len+1); 

pTemp = pc; //给临时指针赋值
for(int i=0;i<len;i++) 

*pTemp++=str.GetAt(i);  //移动的是临时指针,pc没变。

free(pc);///////////////////////////////运行应该不报错。
pc=NULL; 


--- 共有 1 条评论 ---
xxdd这样也报错。为什么? 5年前 回复

引用来自“明月惊鹊”的答案

*pc++=str.GetAt(i);  

这句会导致pc向后面移动了。你释放的是野指针。可以改为:

#include <afx.h> 
void main() 

CString str="11223344"; 
char *pc ,*pTemp;  //加一个临时指针;
int len=str.GetLength(); 
pc=(char *)malloc(sizeof(char)*len+1); 

pTemp = pc; //给临时指针赋值
for(int i=0;i<len;i++) 

*pTemp++=str.GetAt(i);  //移动的是临时指针,pc没变。

free(pc);///////////////////////////////运行应该不报错。
pc=NULL; 


不知道为什么,这样也报错,求解。
--- 共有 1 条评论 ---
明月惊鹊报什么错呢?贴上提示信息来看看吧。 5年前 回复
顶部