第一个疑问:
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 问题有点多~~先谢啦
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 问题有点多~~先谢啦
int *a;
a=new int;
那么之后如何把数据放入a指向的内存里呢?*a = 1;
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;的。
有一个CPtrList类的对象,当用removeat函数移除某一个节点后,为什么又需要用delete把节点指向的内存释放?
(我知道这样是防止内存泄露,我不理解的是什么时候要用delete,为什么有的时候不用)
:-D 问题有点多~~先谢啦都是要用的,
2. 你已经将某些值放到你new出来的空间里了。另外用完之后你需要delete cfginf
3. CPtrList链表中保存的只是指针的值,没有保存各个指针指向的内存空间,因此不会去释放指针指向的内存空间。所以在删除CPtrList节点之前,需要将节点指向的内存空间delelte
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,这两个是配对的。
导致我困惑的原因主要是我在看两本VC++编程的书,上面new出的内存都没有delete掉,而removeat后就用delete了,所以我就以为……难道这些书的代码不规范啊!
new出来的对象可能在其他地方delete了,不一定是在同一个函数甚至在同一个文件中new、delete成对的。
所有的代码你都研究过了?
===============================
new出来的东西都是要delete的。有些书写的时候不严谨也是有的。
=================
一般原则是在一个函数里new的,最好在同一个函数里delete,否则也有可能出问题,不过只是有可能吧,其实,你就是只new,不delete,对于一些小应用来说,也没有什么问题,问题一般都是出在一些对资源要求很大的地方。
但对于我看的书肯定是不严谨,比如有的地方在一个消息响应函数里:
C***::*****()
{
while(****)
{
abc=new DFG; //abc为类的成员变量(DFG *abc),DFG 为结构体
abc.***=***;
……
}
}
while会执行好几个循环,如果不在while循环末尾加上delete,那么不是每执行一次while就有一段内存new出来而没法释放了吗?难道在别的地方还能释放?
PS:我读的书是Visual C++项目开发实践(李强 贾云霞编著)、Visual C++6.0项目开发指南(武装 张碧霞编著)在图书馆找的,很老,2003年出版的。大家能不能推荐些类似的比较新的书啊。 谢谢啦!