我有两个结体分别如下:  
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 为什么第二种不行,要报内存错误,