发现一个问题--关于new申请的内存
[| 2010/04/04 15:07]
由于之前程序里的一个BUG,导致返回的临时对象里的char*成员指向的内存其实已经被释放了。
当我使用这个临时对象给另外一个新对象赋值时,首先需要给新对象申请空间,我惊奇的发现,新new申请的内存地址和临时对象的那个char*成员的值相同。
想了一想,猜测是以下原因:由于new申请的内存都在堆中,在距离上次释放内存之后没有新申请内存,所以再次申请内存的时候按顺序申请,自然地址从上次释放的起始位置开始,自然和之前的那个指针值相等。
看似巧合,实际有必然性。
当我使用这个临时对象给另外一个新对象赋值时,首先需要给新对象申请空间,我惊奇的发现,新new申请的内存地址和临时对象的那个char*成员的值相同。
想了一想,猜测是以下原因:由于new申请的内存都在堆中,在距离上次释放内存之后没有新申请内存,所以再次申请内存的时候按顺序申请,自然地址从上次释放的起始位置开始,自然和之前的那个指针值相等。
看似巧合,实际有必然性。