几种数据,如何释放内存?

virsnow 2005-04-21 10:04:34
1)
比如象:
FILE* fp;用完了之后是否要释放,怎样释放?

2)
还有:
CButton *pButton2 ;
sockaddr_in severAddr;
socket;
char a[100];
DWORD dwRet;
CString str;
这些用完了之后又是怎样释放的呢?


3)
INFO* pINFO= new INFO;//INFO为一数据结构
::CreateThread(NULL,0,WorkThread,(LPVOID)pINFO,0,&dwthread);
DWORD WINAPI WorkThread(LPVOID lpParam)
这里的pINFO在哪删除,怎样删除,我老是出错!
如果传递的是this,又怎样删除?


...全文
555 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
sjcode 2005-04-22
  • 打赏
  • 举报
回复
只要是你new/malloc出来的堆返回出一个指针赋,就需要delete/free

否则,要吗是你出现memory leak,要吗就是把系统的句柄给删除了。

后果就是死机,挂程序。
virsnow 2005-04-22
  • 打赏
  • 举报
回复
我又明白了好多东西!
virsnow 2005-04-22
  • 打赏
  • 举报
回复
谢谢楼上各位高手指点!结贴!
djw_xiaoyu 2005-04-22
  • 打赏
  • 举报
回复
其实,对于对象的分配与释放问题,一句话原则:
在堆中创建的对象(New)就要释放,而在栈中建立的一般不用我们去显式释放。
例如:
CObject *pObject=new CObject();//在堆中建立对象,需要释放(delete)
... ....
delete pObject;
------------------
void function(args...)
{
CObject new_object; //在栈中建立对象,不用显式释放
... ...
}
社会栋梁 2005-04-22
  • 打赏
  • 举报
回复
数值上一样,但INVALID_SOCKET的命名可读性强
south2000 2005-04-21
  • 打赏
  • 举报
回复
1)
fclode(fp)

2)
对于CButton *pButton2 ;
你如果使用了pButton2 = new CButton;的话,要释放,用delete pButton2;

3)
可以在线程调用结束后释放,
使用delete pINFO;
Kudeet 2005-04-21
  • 打赏
  • 举报
回复
closesocket后SOCKET的内存就没有,已经释放
virsnow 2005-04-21
  • 打赏
  • 举报
回复
比如closesocket 后,socket仍存在,并没有释放!怎样释放呢?
virsnow 2005-04-21
  • 打赏
  • 举报
回复
如果以上数据是用在线程中,而且线程开的很多的话,这些数据会不会越积越多呢?
handwolf 2005-04-21
  • 打赏
  • 举报
回复
1)
fclode(fp)

2)
不用手工释放

3)
可以在线程调用结束后释放,或者现成函数中释放
xuzheng318 2005-04-21
  • 打赏
  • 举报
回复
closesocket
This function closes a socket.

int closesocket (
SOCKET s );
idAnts 2005-04-21
  • 打赏
  • 举报
回复
1)fclose
2)CButton *pButton2如果是new出来的就delete,其它的不用释放
3)pINFO最好是等线程运行完了delete
Kudeet 2005-04-21
  • 打赏
  • 举报
回复
套接字用closesocket释放
Kudeet 2005-04-21
  • 打赏
  • 举报
回复
一般用FILE *p; .... fclose(p);//关闭文件指针就可以,原则主要就是new/delete配对使用,其他的大多不需要释放
virsnow 2005-04-21
  • 打赏
  • 举报
回复

socket=NULL;
socket=INVALID_SOCKET;

一样吗?哪种好呢?
菜牛 2005-04-21
  • 打赏
  • 举报
回复
变量的分配,要掌握配对原则:
Open的,要Close;
Create的,要Destroy;
new的,要delete;new ..[..]的,要用delete []..;
malloc的,要free;
无非如此,配对。
sankt 2005-04-21
  • 打赏
  • 举报
回复
up
virsnow 2005-04-21
  • 打赏
  • 举报
回复

socket=NULL;
socket=INVALID_SOCKET;

一样吗?哪种好呢?

hopen 2005-04-21
  • 打赏
  • 举报
回复
呵呵,一个原则如果是malloc出来的就free,new出来的就delete(数组的话是delete[])
fclose(fp);直接delete fp;就会出错fp不是new出来的删除会出错的
将指针设置为NULL(fp= NULL)删除不出错是因为delete函数的实现对空指针不进行操作
句柄(一般包括文件句柄、事件句柄等)要先关闭再设置NULL,否则有资源泄露
virsnow 2005-04-21
  • 打赏
  • 举报
回复
FILE* fp;
fclose(fp);直接delete fp;就会出错
而fp=NULL;delete fp;就可以,这是为什么?
是不是fp也不用delete?


加载更多回复(6)

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧