内存管理 内存分配
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”的原则。