掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
ゼロで初期化された文字列のサイズを知るには? (ID:67068)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
> どういうことですか? 自分のではうまくいってしまいましたけど? それはたまたまです。 VC++ 2005の環境下で試したところ,0が返ってきました。 > たしかにAPI関数なんかでも、文字列へのポインタと、そのサイズも指定させる関数って多いですね。何か意味があるんでしょうか? ポインタから有効なメモリ領域の大きさを取得することはできないからです。 有効な領域というのは物理的に有効な範囲ではなく,論理的に有効な範囲を意味します。 > わざわざ引数でポインタが指し示すメモリ領域のサイズまで要求しなくても、関数の中でそのサイズを取得して、それが足りないようならエラーを返すとか、そういう方法のほうが呼び出し側からすると楽かなぁと・・ まず,そのポインタがヒープなのかスタックなのかはどうやって判定しますか? 次に,そのポインタが指す,論理的に有効な範囲はどうやって判定しますか? > 確かにGlobalSizeがGlobalAllocで要求したメモリサイズとは違う値を返すことはありますけど、これって必ずGlobalAllocで指定したバイト数よりも大きいものになってますよね。多分ページサイズ(?とでも言うんでしょうか?)とかなにかの境界までウンヌンということだったと思うんですが。 メモリの確保手段がGlobalAllocのみというのがそもそもの間違いです。 もっと低レベルな,VirtualAllocのような手段もありますし,ファイルマッピングでメモリを確保しているかもしれません。 > 確保したメモリ領域よりは、少なくとも小さな領域にしかアクセスしない場合でも>バッファーオーバーランという状態になるんでしょうか? 確保したメモリ領域のうち,ある一部分をオブジェクトAに,残りの部分をオブジェクトBに割り当てていた場合に, オブジェクトAの領域に書いているつもりがいつの間にかオブジェクトBまで上書きしてしまったら,それはあきらかにバッファオーバーランです。
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.