首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

内存储器管理 内存分配

2013-02-19 
内存管理 内存分配typedef struct a{char *msg}Atypedef struct b{struct A **__ptrintsize}Bstruct p

内存管理 内存分配
typedef struct a{
    char *msg;}A
typedef struct b{
    struct A **__ptr;
    int  size;
    
}B;
struct pkt{
    u_int32_t       size;
    char            data[0];
} __attribute__((packed));
typedef  struct pkt    PKT;
有这样三个结构体  type msg 里面存有数据 打算把结构体B放于PKT 的data【0】 
这样的话 一般来说申请 内存应该要怎样做 比较好 
1:假如msg是由tmp来的 
A *a1;B *b1;
size=sizeof(PKT)+sizeof(int);
pkt=(PKT*)malloc(size);
b1=(B *)pkt->data;
b1.size=1;
然后再申请A的地址?
b1.__ptr=(A**)malloc((b1.size)*sizeof(A*));
 b1.__ptr[0]=(A *)malloc(sizeof(A));
(b1.__ptr[0])->msg=(char *)malloc(sizeof(char [strlen(tmp)+1]));
strcpy((b1.__ptr[0])->msg,tmp); 
这样做的话 在另外一端data【0】 取出来的数据  用好了后 要free的话 岂不是可能会出现内存泄露??而且要知道data【0】 存数据的长度 我们也不能得知吧 
是否有更好的解决方法没有 
另外我想到 是否可以这样:例如是可以在PKT 申请足够的空间 让 A B  指向哪里 然后 使用后 直接 free掉PKT申请的空间 就可以了??
[解决办法]
通常应遵循“谁malloc,谁free”的原则。

热点排行
Bad Request.