Cでは、uintptr_tを入力するポインタをキャストすると、アドレスの一部が切り捨てられます。とにかくアドレス全体を整数または8バイト以下の他のデータ型として格納する方法はありますか?uintptr_tが小さすぎてアドレスを格納できません
-3
A
答えて
2
uintpt_t
は通常、のいずれかを保持するのに十分な大きさである必要があります。ポインター。
次のタイプは、任意の有効なプロパティを有する符号なし整数型を指定:タイプが存在する場合、
void *
したがって、任意のオブジェクトへのポインタ(C11ドラフトn1570 7.20.1.4)を保持するのに十分な大きさでなければなりません をvoidへのポインタがこの型に変換することができ、次いで 空隙、 に戻すポインタに変換され、結果は、元のポインタに等しく比較する:【このタイプはオプションです]
uintptr_t
は、注目すべきは、これはPOSIXのケースだろうけれども関数へのポインタ、ポータブルに再びuintptr_t
に変換することができ保証はありません。
さらにC標準は、任意整数型はすべてその時があること保証は、実装上のポインタを含むのに十分な大きされません。しかし、タイプuintptr_t
が存在する場合、これは当てはまりません(uintptr_t
タイプは十分に大きいタイプです)。
関連する問題
- 1. フレームバッファは浮動小数点数を格納できません
- 2. Google AdSenseの小さすぎるサイズをカスタマイズできません
- 3. Base64要素(xmlから)が大きすぎて文字列に格納されませんか?以下
- 4. 小さな小数の格納MySQL
- 5. アドレスにdwordを格納
- 6. JPAエンティティが格納されていませんOneToMany関係
- 7. Laravelセッションが格納されていません
- 8. Excel VBA:要素がループに格納されていません
- 9. Angularjsフォームのデータがデータベースに格納されていません
- 10. JSONObject文字列がsharedpreferencesに格納されていません
- 11. 値が配列に格納されていませんか?
- 12. スカラ値がスパークに格納されていません
- 13. 詳細がデータベースに格納されていません
- 14. PHPがmysqlデータベースにipアドレスを格納しています
- 15. SerializeToArray protobuf格納していません
- 16. ソースパッケージツリーに格納されたファイルを開くことができません
- 17. 値が大きすぎるか小さすぎてInt32 - Facebook&dotnetopenauth
- 18. Int16の値が大きすぎるか小さすぎます
- 19. PHPメソッドポストはデータベースにデータを格納することができません。エラーは生成されません
- 20. Arduinoプログラミングで変数にストリームデータを格納できません
- 21. MIPSのレジスタにアドレスを格納する
- 22. 初期アドレスが格納されていないヒープオブジェクトをガベージコレクションから保護できますか?
- 23. データをArrayListに格納できませんか?
- 24. クラスの配列を格納できません
- 25. オブジェクトに辞書の値を格納できません
- 26. グローバル変数内に値を格納できません
- 27. データベースにセッション変数を格納できません
- 28. データベースに時刻を格納できません
- 29. Swift Firebase:_SwiftValueタイプのオブジェクトをfileURLに格納できません
- 30. データベースにブール値を格納できません
セグメント化されたメモリを持つアーキテクチャ内のポインタよりも小さいかもしれません...あなたのケースですか? –
"uintptr_t型へのポインタをキャストすると、アドレスの一部が切り捨てられます"。あなたは何が起きているのか、結果を誤解していないと確信していますか?問題を示す[mcve]を入力してください。 – kaylum
'uintptr_t'はC標準に従ってアドレス全体を格納しなければなりません。おそらくどこかのコードにバグがあります –