C++ 结构体指针 赋值赋的是什么? 赋值后能用delete吗?
话说,今天遇到这么一个问题。
LRU 是一个结构体,有两个结构体指针变量,LRU* mru, LRU* lru,这两个是类成员变量,其实目的是形成一个双链表,mru为头指针,lru为尾指针。
在程序运行的某个阶段,我在方法内部申请了一个局部变量LRU* temp = NULL;然后我有这样一条语句:
temp = mru;然后通过temp读出结构体中的成员进行判断,执行其他操作。
我是在另一个类中调用这个方法,执行5万次。一开始都是可以正确运行的,但是到了2956次的时候,mru 就无法赋值给 temp了,通过debug调试,mru不为空而temp始终是空的,就是说在这次调用的时候,无法将mru赋值给temp,很郁闷,求解释。
所以,我想请教大虾们一下,结构体指针赋值的时候赋值的什么,是地址吗?是不是像int* 赋给 int* 一样?
还有,再temp = mru后,能够delete temp吗?delete的是哪个空间? C++ 指针 Structure
[解决办法]
你别管这是结构体指针还是函数指针异或int指针,重点是它是一个指针类型。
[解决办法]
temp = mru;
delete temp; // 等于delete mru,不管是写哪个名字,都只能释放1次,也就是说new和delete要一一对应
[解决办法]
指针赋值赋的就是地址
一定要搞清楚你是要操作地址这个指针变量还是要操作此地址处的数据
[解决办法]
指针赋值就是把2个指针变量的地址统一了,比如指针a放了1032这个地址,执行过b=a后(这里b也为同类型指针变量)b指针变量也为1032了,你可以想象成2个整数的赋值,只是这2个整数代表某个地址而已
所以你的代码应该是右值mru为空,所以造成temp为空,不是赋值错误。
你调试的时候有没有注意变量的作用范围?