Каирское сообщение об ошибке при выходе - PullRequest
0 голосов
/ 31 августа 2010

В настоящее время я делаю некоторые тесты, используя Cairo, чтобы заменить некоторые существующие GDI / GDI + код в Visual C ++ 2010 и, кажется, работает нормально, но я получаю сообщение об ошибке каждый раз, когда я закрываю свое приложение:

"Исключение первого шанса в 0x68e629dc в CairoTest.exe: 0xC0000005: Место чтения нарушения доступа 0xabababa7 "

Эта ошибка возникает, только если я вызвал cairo_paint (cr), пока приложение работает - если я прокомментирую эту строку, она исчезнет. пока только код Каира в моем приложении:

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);
}

Кто-нибудь может указать мне, что я делаю неправильно?

Как я уже сказал, код, кажется, работает нормально, но мне не нравится просто пахать независимо от того, когда я вижу ошибки.

1 Ответ

1 голос
/ 31 августа 2010

Исключение из первого шанса не обязательно много значит - это обычная часть управления памятью в Windows. По сути, каждый раз, когда вы обращаетесь к чему-либо, находящемуся в виртуальной памяти (например, в файле подкачки), создается исключение первого шанса. Операционная система обрабатывает это путем подкачки требуемых данных в физическую память, после чего ваш код может продолжить выполнение.

Если / когда вы видите исключение second-шанс , это означает, что ОС не обработала исключение, поэтому, если у вас нет обработчика для этого в вашем коде, шансы довольно хорошие, то есть сигналы настоящая проблема.

...