C ++ CImg Место чтения нарушения доступа - PullRequest
0 голосов
/ 14 марта 2020

В настоящее время я пытаюсь научиться использовать библиотеку CImg, но получаю ошибку, которую не совсем понимаю. Документация конструкторов в библиотеке CImg также была довольно бесполезной. Основная идея c заключается в том, что я хочу создать изображение, чтобы я мог писать пиксели на втором шаге (не показан) вручную. Однако доступ к изображению, созданному с помощью конструктора CImg, по какой-то причине запрещен.

Вот минимальный пример:

#include <iostream>
#include <CImg.h>
#include "Header.h"

using namespace std;

int Main() {

    cimg_library::CImg<float> img(200, 200, 0, 3, 0.0);
    cout << "img is: " <<  img(0, 0, 0, 0) << endl;  //<----------------- error occurs here

    return 0;
}

Ошибка гласит: Исключение, выданное в 0x0067B693 в Test.exe: 0xC0000005: Место чтения нарушения доступа 0x00000000

Любая помощь в понимание этого было бы очень полезно!

Лучший

Синий

#

Редактировать: Я попробовал еще 2 вещи, но оба не работают, к сожалению.

1-й : Я пробовал функцию .data (), но безрезультатно. Изменение типов данных (float, int, unsigned char) также не решило проблему, кроме сообщения об ошибке о том, что все теперь будет указывать на NULL-вектор (все еще доступ запрещен).

2nd: I переключился на использование указателей:

    cimg_library::CImg<unsigned char>* img = new cimg_library::CImg<unsigned char>(200, 200, 0, 3, 1);
    cout << "img is: " <<  *img->data(0, 0, 0, 0) << endl;

Это все равно выдает почти то же сообщение об ошибке, что: Исключение: нарушение прав чтения. cimg_library :: CImg :: data (...) вернул nullptr.

1 Ответ

1 голос
/ 15 марта 2020

Не устанавливайте 0, но 1 для количества срезов. В противном случае вы получите пустое изображение 0x0x0x0 без пикселей, что приведет к неправильному доступу к памяти.

...