内存管理 内存分配
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申请的空间 就可以了??
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申请的空间 就可以了??
...全文
相关推荐
全面介绍Windows内存管理机制及C++内存分配实例
全面介绍Windows内存管理机制及C++内存分配实例
C/C++内存管理-内存分配
详细讲解C++内存分配的问题及C++与C分配内存的方式的不同,同时介绍在C++中分配内存的最佳方式。
全面介绍Windows内存管理机制及C 内存分配实例
介绍Windows内存管理机制及C++内存分配实例
全面介绍Windows内存管理机制及C++内存分配实例.pdf
全面介绍Windows内存管理机制及C++内存分配实例
Windows内存管理机制及C++内存分配
从进程空间,内存状态,虚拟内存,内存映射文件,堆,堆栈方面,介绍了Windows内存管理机制及C++内存分配。《windows核心编程》中的精华浓缩。


