【问题标题】:C++ CImg Access violation reading locationC++ CImg 访问冲突读取位置
【发布时间】:2020-03-14 16:55:34
【问题描述】:

我目前正在尝试学习如何使用 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;
}

错误内容如下: Test.exe 中 0x0067B693 处引发异常:0xC0000005:访问冲突读取位置 0x00000000

任何帮助理解这一点将不胜感激!

最好的

蓝色

#

编辑: 我又尝试了 2 件事,但不幸的是,两者都不起作用。

1st:我也尝试了 .data() 函数,但无济于事。更改数据类型(float、int、unsigned char)也没有解决问题,除了给出整个事物现在将指向 NULL 向量的错误消息(仍然拒绝访问)。

第二个:我切换到使用指针:

    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。

【问题讨论】:

    标签: c++ cimg


    【解决方案1】:

    切片数不要设置为 0 而是设置为 1。否则会得到一个没有像素的空图像 0x0x0x0,从而导致错误的内存访问。

    【讨论】:

    • 非常感谢,这确实有帮助!如此微不足道,但我真的没有看到这里的计数不是从 0 开始的。但这是有道理的。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2020-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-12
    相关资源
    最近更新 更多