动态分配内存后又被释放。那么指针会变成野指针,它接着能不能被再赋值为一个有效的指针???

osal_msg_deallocate( (uint8 *)MSGpkt );//打包消息时分配(释放了指针所指的空间)
MSGpkt = (afIncomingMSGPacket_t *)osal_msg_receive( SpiComApp_TaskID );//释放了指针所指向的空间,但指针还是存在(又被赋值)

目前程序是这样运行的,也没有任何问题。我认为这种做法是合法的。

当然没有问题了
MSGpkt 这个变量是一个指针变量。在它的内存当中可以存放一个指针,就是一个地址值。
你开始的时候在这个内存当中存放的一个指针,然后释放了那块地址,这里你要分清楚它释放的是哪个地址,注意,释放的是该指针变量所指向的内存空间的内存,而不是该指针变量的内存空间
所以就算是你释放了之后,依然可以对这个指针变量进行再次的赋值,给它赋一个新的指针。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-11-03
首先你要明白 指针 和 指针变量
你所说的 指针是指针变量 指针是地址 指针变量和普通的变量区别只是 指针变量存放的是 地址 指针变量自己有自己的地址
你说的没有任何问题是碰巧的关系
第2个回答  2011-11-03
当然可以啦,指针只是一个保存了一个内存地址的变量,你这样理解就明白了,你可以把一个指针从初始化,到变成野指针,再到指向新的元素的过程看作下面的过程:
int a = 10;
a = 0;
a = 5;
不要把指针看的太特殊
相似回答