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*
。
关于c++ - 为什么指向指针的已解除引用的std::cout导致-fsanitize = address发出投诉?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50747758/