为什么不能free啊?

xxdd 发布于 2013/03/06 17:26
阅读 379
收藏 0
#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;
}
加载中
0
明月惊鹊
明月惊鹊

*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; 


xxdd
xxdd
这样也报错。为什么?
0
Xsank
Xsank
 正解,你对要释放的指针进行了偏移操作,如果释放已经不是原来的那片空间了,故而报错
0
xxdd
xxdd

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

*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; 


不知道为什么,这样也报错,求解。
明月惊鹊
明月惊鹊
报什么错呢?贴上提示信息来看看吧。
返回顶部
顶部