第一个疑问:
int *a;
a=new int;
那么之后如何把数据放入a指向的内存里呢?第二个疑问:
struct CFGINF     
{
int flag;    
CString szTitle;
CString szPath;
};
struct CFGINF * cfginf;
cfginf=new cfginf;
CfgInf->flag=1;
CfgInf->szTitle=m_szEdittitle;
CfgInf->szPath=m_szEditpath;
这是如何把相应的值放到new出来的内存里的呢?而且为什么不需要我用delete把new的内存释放呢?第三个疑问:
有一个CPtrList类的对象,当用removeat函数移除某一个节点后,为什么又需要用delete把节点指向的内存释放?
(我知道这样是防止内存泄露,我不理解的是什么时候要用delete,为什么有的时候不用)
:-D 问题有点多~~先谢啦

解决方案 »

  1.   

    第一个疑问:
    int *a;
    a=new int;
    那么之后如何把数据放入a指向的内存里呢?*a = 1;
      

  2.   

    第二个疑问:
    struct CFGINF   
    {
    int flag;   
    CString szTitle;
    CString szPath;
    };
    struct CFGINF * cfginf;
    cfginf=new cfginf;
    CfgInf->flag=1;
    CfgInf->szTitle=m_szEdittitle;
    CfgInf->szPath=m_szEditpath;
    这是如何把相应的值放到new出来的内存里的呢?而且为什么不需要我用delete把new的内存释放呢? 
    谁说不需要啊?
    最后你不用的时候,还是要
    delete cfginf;的。
      

  3.   

    第三个疑问:
    有一个CPtrList类的对象,当用removeat函数移除某一个节点后,为什么又需要用delete把节点指向的内存释放?
    (我知道这样是防止内存泄露,我不理解的是什么时候要用delete,为什么有的时候不用)
    :-D 问题有点多~~先谢啦都是要用的,
      

  4.   

    1. 对指针a指向的int赋值 *a=1;
    2. 你已经将某些值放到你new出来的空间里了。另外用完之后你需要delete cfginf
    3. CPtrList链表中保存的只是指针的值,没有保存各个指针指向的内存空间,因此不会去释放指针指向的内存空间。所以在删除CPtrList节点之前,需要将节点指向的内存空间delelte
      

  5.   

    第二个疑问: 
    struct CFGINF    

    int flag;    
    CString szTitle; 
    CString szPath; 
    }; 
    struct CFGINF * cfginf; 
    cfginf=new cfginf; 
    CfgInf->flag=1; 
    CfgInf->szTitle=m_szEdittitle; 
    CfgInf->szPath=m_szEditpath; 
    这是如何把相应的值放到new出来的内存里的呢?而且为什么不需要我用delete把new的内存释放呢? 
    ==========
    上面不是已经赋值了吗?CfgInf->flag=1,这不就行了,另外new出来的东西不用时是一定要delete的。
    第三个问题更简单,removeat只是将结点移出来,结点不用了当然要delete。总之一句话,new出来的一定要delete,这两个是配对的。
      

  6.   

    “removeat只是将结点移出来,结点不用了当然要delete。总之一句话,new出来的一定要delete,这两个是配对的。”这个我听说了很多遍啊:-D
    导致我困惑的原因主要是我在看两本VC++编程的书,上面new出的内存都没有delete掉,而removeat后就用delete了,所以我就以为……难道这些书的代码不规范啊!
      

  7.   

    你看的什么书?
    new出来的对象可能在其他地方delete了,不一定是在同一个函数甚至在同一个文件中new、delete成对的。
    所有的代码你都研究过了?
      

  8.   

    导致我困惑的原因主要是我在看两本VC++编程的书,上面new出的内存都没有delete掉
    ===============================
    new出来的东西都是要delete的。有些书写的时候不严谨也是有的。
      

  9.   

    new出来的对象可能在其他地方delete了,不一定是在同一个函数甚至在同一个文件中new、delete成对的。
    =================
    一般原则是在一个函数里new的,最好在同一个函数里delete,否则也有可能出问题,不过只是有可能吧,其实,你就是只new,不delete,对于一些小应用来说,也没有什么问题,问题一般都是出在一些对资源要求很大的地方。
      

  10.   

    对于一些类成员指针来说,可能在某些函数中new,而在析构函数中delete
      

  11.   

    嗯,我也知道有这种情况。
    但对于我看的书肯定是不严谨,比如有的地方在一个消息响应函数里:
    C***::*****()
    {
    while(****)
    {
    abc=new DFG; //abc为类的成员变量(DFG *abc),DFG 为结构体
    abc.***=***;
    ……
    }
    }
    while会执行好几个循环,如果不在while循环末尾加上delete,那么不是每执行一次while就有一段内存new出来而没法释放了吗?难道在别的地方还能释放?
    PS:我读的书是Visual C++项目开发实践(李强 贾云霞编著)、Visual C++6.0项目开发指南(武装 张碧霞编著)在图书馆找的,很老,2003年出版的。大家能不能推荐些类似的比较新的书啊。 谢谢啦!
      

  12.   

    如果你用CArray 或CList就不用显式调用delete 了,这两个类 类似vector和list,其它的几个结构保存的都是指针,如果你的数据是在外面new的,必须显式删除