AddressSanitizer leetcodeエラーレポートまとめ
1542 ワード
概要
Address Sanitizer(ASan)は、高速メモリエラー検出ツールです.非常に速く、プログラムの2倍程度しか遅延しません(Valgrindよりずっと速いです).コンパイラinstrumentationモジュールとmalloc()/free()の代替を提供するランタイムライブラリが含まれます.gcc 4.8からAddressSanitizerはgccの一部となる.もちろん、より良い体験を得るには、gcc 4.8のAddressSanitizerがまだ完備していないため、4.9以上のバージョンを使用することが望ましい.最大の欠点は記号情報がないことだ.
エラーのタイプ
インスタンスの共有
これはポインタの運用エラーによるheap-usr-after-freeのエラーです
疑問
しかし、私はやはり新聞の間違いに少し理解していません.私がleetcodeをしてチェーンテーブルの最後からN番目の要素を削除する時、次のコードを書いて通過しました
class Solution {
public:
ListNode* removeNthFromEnd(ListNode* head, int n) {
ListNode *part = new ListNode(NULL);
ListNode *p = part,*q = part;
part->next = head;
for(int i = 0;inext;
//
while(q->next)
{
p = p->next;
q = q->next;
}
//
ListNode *j = p->next;
p->next = j->next;
delete j;
return part->next;
}
};
return part->next
のみをreturn head
に変更すると、heap-usr-after-freeとエラーが発生します.headに戻るとチェーンテーブルのヘッダノードが削除されるべきだと知っていますが、最後にdelete part
が追加されても同様にエラーが報告されるので疑問です.もし誰かが知っていたらコメントエリアで一緒に議論してほしい!