[英]Why does std::cout of a dereferenced pointer to pointer cause -fsanitize=address to complain?
char t = 'a';
char * p1 = &t;
char** p2 = &p1;
std::cout << p2 << " " << *p2 << " " << **p2 << '\n';
我正在使用clang和-fsanitize = address,它抱怨內存訪問溢出了一個變量並終止了我的程序,但是當我逐步執行gdb時,我看到是的,所有內容都已定義,並且應該打印兩個地址,后跟一個“ a”。
如果我刪除中間的“ * p2”,它將運行良好,即,它是將半解引用的指針打印到導致我出現問題的指針。
std::cout
假定所有char*
指向以null結尾的字符串。 如果需要地址,請將其強制轉換為void*
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.