您的位置:首页 > 其它

关于结构体内存分配及释放

2010-04-15 12:21 411 查看
struct mybuf{
int size;
char buffer[1];
}

为什么要这样定义结构?char[1]只能放/0,如何放数据
再看使用
bufsize=1024;
struct mybuf *mbuf = (struct mybuf *)malloc(sizeof(struct mybuf)+ bufsize +1);
strcpy(mbuf.buffer, "this is test");
[问题]这样做是不是会数组越界,另外在释放此空间的时候,因为是结构体指针,如果按结构体空间释放,那岂不是内存泄漏?

过去做C的时候也这么写过,特别是在操作消息队列时经常这么用,这么做可以扩展结构体中缓冲区buffer的大小
如你的代码,实际buffer分配的是1024,只在使用的时候才动态分配,而只保留结构体的指针,释放时只需释放结构体指针就可以了
另外解析一下这样做为什么不会内存泄漏
首先要了解malloc/free的机制
malloc其实分配了比你申请的大小更大一点的空间,那这大出来的是做什么的呢,是用来存放分配内存块的信息,包括了空间大小信息,而free是怎么做的呢,它先根据你传入的指针,计算出块的实际首地址,通过(-sizeof(块信息结构))得到的,把块的状态置为可用,这就是free的简单过程,那么你就明白,分配的时候是按malloc函数参数的申请大小,不是结构体的大小,那么在释放的时候就是释放malloc分配的大小了,而不是结构体的大小

http://topic.csdn.net/u/20081112/19/b68dd9ef-0825-4570-9d68-9351c1d8c85d.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: