一直没怎么注意指针值加上数值的问题,认为就是在指针地址上往后叠加n个字节,直到今天写STL 库中二级空间配置器,内存报错:堆被损坏!单步跟踪后才发现问题
首先说明问题:
int a(0); //假设 &a = 0x1002
int * p = &a; //此时 p = 0x1002
p = p + 3; //错误想法: p = 0x1002 + 3 = 0x1005
//但该操作的实际意义: p = 0x1002 + sizeof(int)*3 = 0x1002 + 0xc (4*3)
T* p += num 等价于 T * p += sizeof(T) * num
这个问题很基础,但是由于平时很少注意内存指针的值的问题,才会导致这么简单的理解错误