簡體   English   中英

為什么指向指針的已解除引用的std :: cout導致-fsanitize = address發出投訴?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM