函数返回导致 指针变成野指针?

qq_41275973 2019-04-23 09:37:32
大家好!
我在写B树删除操作的时候 遇到了一个奇怪的BUG,



SwapOutPage 通过传t和pbl指针调用 swapOne

然后t指针在swapOne函数里好好的,到这个函数的 有大括号也还是好的,但是 返回到swapOutPage的时候 指针就成了野指针





这里可以看到 返回的时候 t 就出现了问题


不知道描述的 够不够..

不知道大家遇没遇到过这种问题,请问下是什么情况...或者有什么debug的方向吗 ..因为在被调用函数里是好的 ,返回调用它函数的时候出的问题,我完全不知道该怎么DEBUG..
...全文
419 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
徒步去拉屎 2022-01-10
  • 打赏
  • 举报
回复

我也遇到了相同的问题, 当方法按值返回对象的时候,对象有指针的时候,调用拷贝函数的时候,系统生成的临时对象的 指针成员函数就会变成野指针。 你找到解决办法了吗?

NIL_ 2019-04-27
  • 打赏
  • 举报
回复
很有可能你函数 传的是 指针的值,而不是地址. 导致 在某个函数里面free了 ,但返回到函数 指针还是指向原来的
老马何以识途 2019-04-24
  • 打赏
  • 举报
回复
就是在關鍵位置輸出關鍵内容,可以是標準輸出,也可以寫到文件裏。
stherix 2019-04-23
  • 打赏
  • 举报
回复
SwapOne里面的RKey只是个建立在栈上的局部变量 当函数返回的时候,局部变量都被自动释放了,所指向的内存也就是非法 无法在函数体外使用
636f6c696e 2019-04-23
  • 打赏
  • 举报
回复
这个有很多种可能,比如多线程其他线程操作了这个变量,还有是t的内存在LBTreeDelete已经释放了,只是暂时数据没有被更改,所以没看到出问题
qq_41275973 2019-04-23
  • 打赏
  • 举报
回复
引用 3 楼 老马何以识途 的回复:
首先,你這段代碼裏的數據結構和部分函數還不清楚細節如何,很難去判斷。看地址好像是t被移位了,那麽正如樓上所説的,有沒有別的綫程對&t做了操作?

第二點,swapOne的返回值必須馬上使用,比如直接memcpy到一個本地變量,不能到下一個語句操作,會有不可預期的結果。

第三點,調試程序比較準確的是寫日志,單步執行有時候不太準確。

请教下写日志是什么意思?
幻夢之葉 2019-04-23
  • 打赏
  • 举报
回复
1)如楼上所述,如果不是每次都出现并且用到多线程,可能是其他线程对这个内存修改了 2)LBTreeDelete这个函数的问题,先把这个句注释掉,如果问题不出现那就能确定是这个函数逻辑不对
老马何以识途 2019-04-23
  • 打赏
  • 举报
回复
首先,你這段代碼裏的數據結構和部分函數還不清楚細節如何,很難去判斷。看地址好像是t被移位了,那麽正如樓上所説的,有沒有別的綫程對&t做了操作? 第二點,swapOne的返回值必須馬上使用,比如直接memcpy到一個本地變量,不能到下一個語句操作,會有不可預期的結果。 第三點,調試程序比較準確的是寫日志,單步執行有時候不太準確。

70,023

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧