如何申请与释放一个结构

charlyisme 2001-05-16 10:59:00
buf{char* pbuf;
int* ylen;
int len;}
这样为结构申请内存可以吗
buf* kbuf;
kbuf=(buf*)calloc(1,sizeof(buf));

那么,怎样释放这个结构所占的内存呢?
c/c++两种方式有什么不同呢?

呵呵,不懂!请大侠指教!
...全文
88 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
wjzhuang 2001-05-17
  • 打赏
  • 举报
回复
还是使用C++好,有专用的构造函数和虚构函数.在处理类是问题时有很大的优势和便利.
就如火大哥写的那样.
snowrain 2001-05-17
  • 打赏
  • 举报
回复
当然不能直接FREE啦
holyfire 2001-05-17
  • 打赏
  • 举报
回复
最好是专门编写一个函数来处理

Alloc_Buf( buf * b )
{
b = malloc( sizeof( buf ) );
b->pbuf = NULL;
b->ylen = NULL;
b->len = 0;
}

Free_Buf( buf * b )
{
if( b->pbuf )
free( b->pbuf );
if( ylen )
free( b->ylen );
free( b );
}
不然你将结构先释放了,结构内如果有申请了内存,造成这些内存无法释放,这样就会造成内存泄漏

如果使用C++的方法的话,可以使用构造/析构函数

struct buf{
int * pbuf;
int * ylen;
int len;
buf();
~buf();
};

buf::buf()
{
pbuf = NULL;
ylen = NULL;
len = 0;
}

buf::~buf()
{
if( pbuf )
delete [] pbuf;
if( ylen )
delete [] ylen;
}

申请结构的时候
buf * b = new buf;
这时构造函数会被new激活调用
释放的时候
delete b;
这时析构函数会被delete激活调用,你就不用担心内存泄漏了
Edward 2001-05-16
  • 打赏
  • 举报
回复
直接 free(buf); 就可以了。malloc/calloc/realloc 分配的内存用 free 释放。

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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