クリックして評価とフィードバックをお寄せください
MSDN
MSDN ライブラリ
Visual Studio 2005
Visual Studio ドキュメント
Visual C++
C/C++ プログラムのビルド
C/C++ ビルド エラー
 コンパイラの警告 (レベル 3) C4823
このページは次のバージョンについて記述しています。
Microsoft Visual Studio 2005/.NET Framework 2.0

その他のバージョンについては、以下の情報を参照してください。
Visual C++ の概念 : C/C++ プログラムのビルド
コンパイラの警告 (レベル 3) C4823

エラー メッセージ

'関数' : ピンされたポインタを使用していますが、アンワインド セマンティクスは有効にはなりません。/EHa を使用してください

ブロック スコープで宣言された固定ポインタが指すマネージ ヒープ上のオブジェクトの固定を解除するために、コンパイラはローカル クラスのデストラクタの動作をシミュレートし、固定ポインタにポインタを null にするデストラクタがあるように "見せかけ" ます。例外をスローした後でデストラクタを呼び出すことができるようにするには、オブジェクト アンワインディングを有効にする必要があります。これは、/EHsc を使用して行うことができます。

オブジェクトを手動で固定解除し、警告を無視することもできます。

使用例

次の例では C4823 エラーが生成されます。

// C4823.cpp
// compile with: /clr /W3 /EHa-
using namespace System;

ref struct G {
   int m;
};

void f(G ^ pG) {
   try {
      pin_ptr<int> p = &pG->m;
      // manually unpin, ignore warning
      // p = nullptr;
      throw gcnew Exception;
   }
   catch(Exception ^) {}
}   // C4823 warning

int main() {
   f( gcnew G );
}

C4823 は /clr:oldSyntax の使用でも生成されることがあります。次の例では C4823 エラーが生成されます。

// C4823_b.cpp
// compile with: /clr:oldSyntax /W3 /EHa-
using namespace System;

__gc struct G {
   int m;
};

void f(G* pG) {
   try {
      int __pin* p = &pG->m;
      // manually unpin, ignore warning
      // p = 0;
      throw new Exception;
   }
   catch(Exception*) {}
}   // C4823

int main() {
   f( new G );
}
コミュニティ コンテンツ   コミュニティ コンテンツとは
新しいコンテンツの追加 RSS  注釈
Processing
© 2012 Microsoft. All rights reserved. 使用条件 | 商標 | プライバシー
Page view tracker