Visual Studio 2005スレ Part19
at TECH
[
2ch
|
▼Menu
]
■コピペモード
□
スレを通常表示
□
オプションモード
□このスレッドのURL
■項目テキスト
750:デフォルトの名無しさん 07/04/02 22:21:23 >>749 VC++のnew[]とdelete[]は最終的にHeapAllocとHeapFreeを呼び出す。 Heap系関数は解放されたメモリを次の確保要求に備えて、内部に蓄えておく。 かくしてOSからしてみれば確保されたままの状態となるので、 IsBadCodePtrは真を返す。 ちなみにIsBadReadPtrもよろしく。勿論上に書いたことはこれにも当てはまるよ。 IsBad〜PtrはVirtualAllocされているかどうかという判定には使えると思う。 751:デフォルトの名無しさん 07/04/02 22:31:06 2007が出るまで待つべきか2005を買うべきか どうしよう・・・。 アカデミック版が買えるから4k円だけど 752:デフォルトの名無しさん 07/04/02 22:32:31 2012にしとけよ。 753:デフォルトの名無しさん 07/04/02 22:33:55 >>750 なるほど……IsBadXXX系はこの手の判断には使えないという事でよろしいでしょうか。 とすると、次のようなコードの場合、不正を事前に検出するためにはどうしたらいいのでしょう。 void CMemoryTestDlg::OnBnClickedOk() { char* pTest = new char[10]; ::strcpy(pTest, "abc"); TRACE(pTest); delete [] pTest; if (::IsBadStringPtr(pTest, 4) == 0) { TRACE("OK %s\r\n", pTest); // 当たり前だが、ここで落ちる } else { TRACE("NG\r\n"); } } 当然、コメント文を書いたところで、落ちてしまいます。 if文の中身を調整して、不正ポインタかどうかを判別したいわけです。 何かいい手段はないものでしょうか……
次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
レスジャンプ
mixiチェック!
Twitterに投稿
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch
4280日前に更新/197 KB
担当:undef