我有两个结体分别如下:
typedef struct
{
int Aid;
int AHandle;
CString tmp
}A
typedef struct
{
char BTell[8];
char BName[50];
}B 定义实例如下: A TestA;
TestA.Aid = 1;
TestA.AHandle = 2;
TestA.tmp = "hello ";
B TestB;
strcpy(TestB.BTell, "8888 ");
strcpy(TeseB.BName, "jay ");
对过send_thread发送recive_thread接收,这两个都是cwinthread的派生.
send_thread发送线程
unsigned int pmsg;
A *pa;
B *pb;
pmsg = (unsigned int)malloc(sizeof(A)+sizeof(B)); pa= (A*)pmsg;
........
对pa条项内容赋值
........
pb=(B*) (pa+sizeof(A));
....
对pb条项内容赋值
....
this->recive_thread->PostThreadMessage(EVT_RECIVE,0,(LPARAM)pmsg);
recive_thread接收线程
A *pa;
B *pb;
pa=(A*) lParam;
pb= (B*)(pa + sizeof(A)); 取出pa,pb内的值.
问题1:如何释放内存?
Ps:第一种:free((void*)lParam);这样行不行?
第二种:free(pa);
free(pb);
问题2. 第一种编译器怎么知道应该释放多少内存,这样做行不行?问题3 为什么第二种不行,要报内存错误,
typedef struct
{
int Aid;
int AHandle;
CString tmp
}A
typedef struct
{
char BTell[8];
char BName[50];
}B 定义实例如下: A TestA;
TestA.Aid = 1;
TestA.AHandle = 2;
TestA.tmp = "hello ";
B TestB;
strcpy(TestB.BTell, "8888 ");
strcpy(TeseB.BName, "jay ");
对过send_thread发送recive_thread接收,这两个都是cwinthread的派生.
send_thread发送线程
unsigned int pmsg;
A *pa;
B *pb;
pmsg = (unsigned int)malloc(sizeof(A)+sizeof(B)); pa= (A*)pmsg;
........
对pa条项内容赋值
........
pb=(B*) (pa+sizeof(A));
....
对pb条项内容赋值
....
this->recive_thread->PostThreadMessage(EVT_RECIVE,0,(LPARAM)pmsg);
recive_thread接收线程
A *pa;
B *pb;
pa=(A*) lParam;
pb= (B*)(pa + sizeof(A)); 取出pa,pb内的值.
问题1:如何释放内存?
Ps:第一种:free((void*)lParam);这样行不行?
第二种:free(pa);
free(pb);
问题2. 第一种编译器怎么知道应该释放多少内存,这样做行不行?问题3 为什么第二种不行,要报内存错误,
解决方案 »
- wsm 为什么标题栏处理消息的时候不能调用父类的啊?
- WSAInstallServiceClass 注册服务类总是不成功,求解释!
- win32创建对话框求助
- 求高手简单讲讲完成端口编程原理及列子
- VC++ messagebox在unicode环境怎样输出一个变量
- 关于这个 CreateMutex 的问题, 有些晕了
- 怎样可以给线程传递参数??
- 不想用ADODataCtrol与DataGrid绑定使用,但不知道我定义的DataGrid地对象m_datagrid中用那个函数来设置数据源?
- 请问难道Ado没有对VFoxpro的dbf文件支持吗?如果有支持,则ole db 提供者选那一项?
- 推荐几本学习VC的好书?
- VC++ 如何调用API函数
- 右键复制文件夹到U盘
请大家多多指教
你malloc了sizeof(A)+sizeof(B)却想对一个内存块分别free两次,当然会错