unsigned char* createImageBuffer(unsigned int bytes)
{
unsigned char* ptr;
cudaSetDeviceFlags(cudaDeviceMapHost);
cudaHostAlloc(&ptr, bytes, cudaHostAllocMapped);
return ptr;
}
cv::Mat sGray(frame.size(), CV_8U, createImageBuffer(frame.size().width * frame.size().height));
cv::Mat dGray(frame.size(), CV_8U, createImageBuffer(frame.size().width * frame.size().height));
cv::Mat eGray(frame.size(), CV_8U, createImageBuffer(frame.size().width * frame.size().height));
Проблема во время отладки связана с доступом к ограниченной памяти при 0x00000000. Функция должна возвращать указатель на место размещения байтов изображения, но это дает мне плохое значение ptr.Плохое значение ptr при попытке выделить память для буфера изображения
Выход:
первого шанса исключение в 0x0c10e473 в improc.exe: 0xC0000005: Access чтения нарушение расположения 0x00000000. Необработанное исключение в 0x0c10e473 в файле instc.exe: 0xC0000005: Чтение нарушения доступа местоположение 0x00000000.
видео к учебнику я последовал за: https://youtu.be/j9vb5UjQCQg
Вы уверены, что 'frame' не пусто? – ilke444
Точка доступа к нарушениям доступа 0x00000000 означает, что 'createImageBuffer' возвращает нулевой указатель. И самая возможная причина - то, что @ ilke444 указал - 'frame.size()' return 0. – pSoLT