C++:ハマったエラー
1. ポインタの値をostreamで表示したいとき
// ptr.cpp #include <iostream> int main(void) { char a; char* p; p = &a; std::cout << " p = " << std::hex << (unsinged int) p << std::endl; std::cout << "&a = " << std::hex << (unsinged int) p << std::endl; return 0; }
上記の記述をg++で、実行すると以下のエラーがでる。
ptr.cpp:11: error: cast from ‘char*’ to ‘unsigned int’ loses precision
原因:64bit環境のアドレスを32bitにキャストしている
対策:64bitでキャストする
// ptr.cpp #include <iostream> #include <stdint.h> // C++11より新しい場合は#include <cstdint> int main(void) { char a; char* p; p = &a; std::cout << " p = " << std::hex << (uint64_t) p << std::endl; std::cout << "&a = " << std::hex << (uint64_t) p << std::endl; return 0; }