最近在刷网格图dfs和bfs的题。之前都没有加引用的习惯,前段时间做一道dfs,做完了和题解思路一致,但却频频超时,查了十几分钟,最后发现是四向方向数组少了个引用,加上后马上通过了……可想而知,如今能引用几乎都尽可能带上了。
然而今天这个问题又刚好是滥用引用导致的。
具体报错:
报错代码:
报错原因
使用引用(&)将变量dis, r, c都指向了q.front()本身。而当q.front()被pop之后,在堆中的内存释放,使得该内存在被分配之前无法再次调用。dis, r, c此时指向了被释放后的内存,故产生报错heap-use-after-free 释放堆内存被使用
将引用去掉后,dis, r, c 将会把q.front()中的值copy一份,即便之后q.front()被pop,dis,r,c作为副本,也仍然可以正常调用~
参考
【关于LC的heap-use-after-free问题 - CSDN App】https://blog.csdn.net/qq_39255924/article/details/123037669?sharetype=blog&shareId=123037669&sharerefer=APP&sharesource=threedoves&sharefrom=link