0

現在、Cairoを使用してVisual C++2010の既存のGDI/GDI +コードを置き換えるテストを行っていますが、正常に機能しているようですが、アプリケーションを閉じるたびにエラーメッセージが表示されます。

「CairoTest.exeの0x68e629dcでの初回例外:0xC0000005:アクセス違反の読み取り場所0xabababa7」

このエラーは、アプリケーションの実行中にcairo_paint(cr)を呼び出した場合にのみ発生します。この行をコメントアウトすると、表示されなくなります。これまでの私のアプリケーションの唯一のCairoコードは:

CChildView::CChildView()
{
     testsurface = cairo_image_surface_create_from_png("BlackShinyBackground.png");
}

CChildView::~CChildView()
{
     cairo_surface_destroy(testsurface);
}

void CChildView::OnPaint()
{
     CPaintDC dc(this);

     cairo_surface_t *surface = cairo_win32_surface_create(dc.m_hDC);
     cairo_t *cr = cairo_create (surface);

     cairo_set_source_surface(cr, testsurface, 0, 0);
     cairo_paint(cr);
     cairo_destroy (cr);
     cairo_surface_destroy (surface);
}

誰かが私が間違っている方向に私を向けることができますか?

私が言ったように、コードは正常に機能しているように見えますが、エラーが表示されるタイミングに関係なく、ただ耕すのは好きではありません。

4

1 に答える 1

1

最初のチャンスの例外は、必ずしもあまり意味がありません。これは、Windows のメモリ管理の日常的な部分です。基本的に、仮想メモリ (ページング ファイルなど) にあるものにアクセスするたびに、初回例外が作成されます。OS は、必要なデータを物理メモリにページングすることでこれを処理し、コードを実行し続けることができます。

セカンドチャンス例外が表示された場合、それは OS が例外を処理しなかったことを意味するため、コードにそのハンドラーがない限り、実際の問題を示す可能性はかなり高いです。

于 2010-08-31T16:17:33.223 に答える