你好,请问为什么m_ctrmsg赋值后 还是空?

void CMessage::CreateMessage(const MSG_LOGIN& msg_login)
{
int len = sizeof(MSG_LOGIN);
if (m_ctrmsg != NULL)
{
delete m_ctrmsg;
}
m_ctrmsg = new char[len];
memset(m_ctrmsg,0,len);
memcpy(m_ctrmsg,(char*)&msg_login,len );
}
msg_login复制正确 但是m_ctrmsg赋值后 还是空 看不到值

梵蒂冈之花
浏览 154回答 1
1回答

忽然笑

内存复制函数及内存的一些思考内存复制函数:void *memcpy(void *pvTo,const void *pvFrom,size_t size){assert((pvTO !=NULL)&&(pvFrom != NULL)); //使用断言,防止pvTo或pvFrom为NULLtypedef char byte;byte *pbto =(byte *)pvTo; //防止改变pvTo的地址byte *pbfrom = (byte *)pvFrom; //防止改变pvFrom的地址while(size-->0){*pbTo++ = *pbFrom++;}return pbto;}关于内存思考:第一种情况:/**程序崩溃*因为getmemory并不能传递动态内存,test函数中的str一直都是NULL。*/void getmemory(char *p){p = (char *)malloc(100);}void test(void){char *str = NULL;getmemory(str);strcpy(str,"hello,world"); //使程序崩溃printf(str);}第二种情况:/**可能是乱码*因为getmemory返回的是只想“栈内存”的指针,该指针的地址不是NULL,*但其原有的内容已经被清除,新内容不可知。*/char *getmemory(void){char p[]="hello world";return p;}void test(void){char *str = NULL;str=getmemory();// strcpy(str,"hello,world");printf(str);}第三种情况:/**能够输出hello;*内存泄露;**/void *getmemory(char **p,int num){*p = (char *)malloc(num);}void test(void){char *str = NULL;getmemory(&str,100);strcpy(str,"hello");printf(str);}第四种情况:/**篡改动态内存区的内容,后果难以预料,非常危险。因为free(str)之后,str称为野指针,*if(str!=NULL)语句不起作用*/void test(void){char *str = (char *)malloc(100);strcpy(str,"hello");free(str);if(str != NULL){strcpy(str,"world");printf(str);}}问题:动态内存会被自动释放掉吗?void Func(void){char *p = (char *)malloc(100);}(1)指针消亡了,并不表示它指向的内存会被自动释放;(2)内存被释放了,并不表示指针会消亡或者称为NULL;
打开App,查看更多内容
随时随地看视频慕课网APP