首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

malloc free new delete的有关问题

2013-01-11 
malloc free new delete的问题下面代码CreateList函数最后如果释放了pTemp,就访问不到创建的数据,那么如何

malloc free new delete的问题
下面代码CreateList函数最后如果释放了pTemp,就访问不到创建的数据,那么如何理解malloc之后一定要free防止内存泄露的问题?
还有new和delete相对于malloc和free有什么优点?不是构造析构这点。
谢谢大家先~


 #include<stdio.h>
 #include<stdlib.h>
 
 typedef struct LearList
 {
 int num;
 struct LearList* pNext;
 }LearList;
 LearList* pHead = NULL;
 LearList* pTail = NULL;
 
 void CreateList();
 void ShowList();

 void CreateList()
 {
 int num;
 LearList* pTemp;
 printf("请输入一个数");
 scanf("%d",&num);
 while(num)
 {
 pTemp = (LearList*)malloc(sizeof(LearList));
 pTemp->num = num;
 pTemp->pNext =NULL;
 if(!pHead)
 {
 pHead=pTemp;
 }
 else
 {
 pTail->pNext=pTemp;
 }
 pTail=pTemp;
 printf("请输入一个数");
 scanf("%d",&num);
 }
 //free(pTemp);
 }
 
 void ShowList()
 {
 LearList* pTemp = pHead;
 while(pTemp)
 {
 printf("%d",pTemp->num);
 pTemp = pTemp->pNext;
 }
 }
 
 int main()
 {
 CreateList();
 ShowList();
system("pause");
 return 0;
 }

[解决办法]
去除构造析构来说,new是操作符,是编译器的东西   malloc是库函数,能看到代码……
[解决办法]
malloc和free只负责分配和释放内存。
有关new和delete操作符看看下面这篇文章:
http://blog.csdn.net/xiexievv/article/details/8258237
[解决办法]
引用:
引用:malloc之后你申请了内存,以后你就可以访问,free后把内存还给系统,你在访问就出现问题。

new/delete和malloc/free前者调用构造和析构函数,后者不会。真的除掉这一点,我也想不出还有什么特别的地方了。

也许,new比较直观一点吧。
谢谢,不过应该在哪free?不释放肯定是不对了
      ……


CreateList()返回你的pTemp

main()函数返回之前 或者你确定你已经不再使用pTemp的地方释放

malloc/free就是单纯的申请释放内存
new/delete是操作符,这就意味着你可以重载
另外 new的用法大致可以分为3种:new表达式new operator,new操作符operator new,可以在已经申请的内存块上创建对象placement new
对于第3种比如
char *pTemp = (char *)malloc(sizeof(OBJ));
pTemp = new(pTemp)OBJ();


[解决办法]
malloc 创建之后随时可以free 、但是你可以按需压来释放、最坏情况是在程序退去之前释放掉、也就是楼上说的main函数中return 0;之前   在下项目的情况下 根据创建对象的生命周期、不需要的时候释放! 像你这个程序 你可以单独写一个del函数来删除你、每次退去之前调用。你在man函数里面删除不能用一个简单的free来删除!
   
[解决办法]
你的源代码中 free是在while之后也就是其实创建了很多pTemp?指针、但是你删除的之后最后一个 肯定是有问题的。。
 正确的删除时根据你显示的那个方法获取每一个链表的节点指针 再一一删除!
[解决办法]

malloc和free

fopen和fclose
那样用。

热点排行