c++指针赋值后地址错误

下面是gdb调试结果, 注意看p &copyConfig->roleDefine 显示地址是 0x3116030,赋值给引用后(const RoleDefineVector *) 0x311602c,赋值前后值竟然变化了, 这是怎么回事呢?求大侠指教

296 if ( !copyConfig) {
(gdb) p copyConfig
$1 = (CopyConfigBase ) 0x3115fe8
(gdb) p &copyConfig->roleDefine
$3 = (RoleDefineVector *) 0x3116030
(gdb) n
299 Map
scene = MapManager::getInstance().loadMap(copyConfig->mapid);
(gdb) n
300 if ( !scene ) {
(gdb) p scene
$4 = (Scene ) 0x7ffeb406b848
(gdb) n
303 const RoleDefineVector& ndv = copyConfig->roleDefine;
(gdb)
305 HangCopy
copy= new HangCopy( copyConfig, scene);
(gdb) p ndv
$5 = std::vector of length 38654705664, capacity 68719476736 = {Cannot access memory at address 0x311748000000000
(gdb) p &ndv
$6 = (const RoleDefineVector *) 0x311602c
(gdb) dis

看下是不是访问别的变量引起数组越界了。

const变量储存的空间与普通变量不是同一块空间

const RoleDefineVector& ndv = copyConfig->roleDefine;
分配后,在栈内会创建一个指针变量 ndv ,这个里面的值就是 copyConfig->roleDefine 的地址
前后的值变化,说明这个ndv指针存储的值变化了,你把ndv地址找到,然后设置一个断点(当此数据被修改则触发断点)。那么就会查找到是谁修改的这个值。

还是上代码更合适看出来问题。。。