malloc free new delete的有关问题

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
那样用。