请问函数内部的临时指针和句柄是不是在函数结束前都要写代码释放?也就是函数在调用完成后是否会自动释放内部的临时变量?比如这个句柄
HANDLE hFile = CreateFile(_T("C:\\MyFile.DAT"),
         GENERIC_WRITE, FILE_SHARE_READ,
         NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
当我完成文件的读写后是否需要添加代码释放?还是函数自动完成?
又比如使用链表时,增加删除节点时,往往会在函数内部使用一两个临时变量指针
Node *p, *q;
p=LinkHead;
q=p->next;
while(q->id!=num)
{
    p=p->next;
    q=q->next;
}//添加或删除操作
...这时函数内部的临时变量p,q应该手动添加代码释放吗?还是自动由函数完成?如果释放,那释放的是这个指针?还是指针指向的内存呢?希望高手给予指点,谢谢!

解决方案 »

  1.   

    1 需要 CloseHandle(hFile)2 需要释放的不是 p 和 q,而是用 new 或 malloc 等分配的内存
      

  2.   


    1 需要 CloseHandle(hFile) 2 如果要删除 p 和 q指向的节点,要free或delete。 
      

  3.   

    那如果我使用了
    CNode *p = new Node;然后将p插入到链表中,那我在InsertNode()函数调用完后需要delete p吗?
    如果delete p,会不会把添加的节点删除了?
      

  4.   

    hFile,就像上面讲的CloseHandle();
    CNode * p ,如果把数据放在一些全局变量里面了,比如一个全局链表,
    那么,就要; p=NULL;delete p;否则delete p;
    如果是 char * p=new char[];
    如果数据有其他引用,不能删除,那么就 p=NULL;delete p;
    否则 delete [] p;
      

  5.   

    所有Handle是Create出来的都需要CloseHandle,临时指针如果不是new出来的,不需要delete,如果它是传入参数的话应该由Caller 函数负责释放。
      

  6.   

    我今天试了一下,发现了一个奇怪的现象--问题也解决了,每个回帖都得分!
    就是对于单个字符的指针,char *p = new char;
    delete p释放p同时释放了p指向的内存!内存被清空。
    但是对于结构体指针Node *p = new Node;
    调用delete p;只会释放p,但内存不会清空!
    呵呵,好奇怪呀!delete p以后还可以使用该内存Node中的信息!
      

  7.   

    我晕 08年的帖,你调用delete的时候会调用Node的析构函数,你析构函数如果没写,new出来的还是在那里,泄露了。