C++ CImg Расположение чтения нарушения доступа

В настоящее время я пытаюсь научиться использовать библиотеку CImg, но получаю сообщение об ошибке, которое не совсем понимаю. Документация конструкторов в библиотеке CImg также была бесполезна. Основная идея заключается в том, что я хочу создать изображение, чтобы на втором этапе (не показано) я мог написать пиксели вручную. Однако доступ к образу, созданному с помощью конструктора 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 (доступ по-прежнему запрещен).

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

    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.


person Blue Moon    schedule 14.03.2020    source источник


Ответы (1)


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

person Bvalabas    schedule 15.03.2020
comment
Большое спасибо, это действительно помогло! Так тривиально, но я действительно не видел, чтобы отсчет здесь не начинался с 0. Но это имеет смысл. Спасибо! - person Blue Moon; 15.03.2020