【发布时间】:2010-01-20 04:34:00
【问题描述】:
我用 C++ 做一些图像处理工作。为此,我使用 CImg.h 库,我觉得这对我的工作很有帮助。
这是我编写的一小段代码,它只是读取图像并显示它。
#include "../CImg.h"
#include "iostream"
using namespace std;
using namespace cimg_library;
int main(int argc,char**argv)
{
CImg<unsigned char> img(argv[1]);
img.display();
return 0;
}
当我将 lena.pgm 作为输入时,此代码会显示图像。好像我给出了其他图像,例如我在同一目录中出现的 ddnl.pgm,我得到“分段错误”。
当我使用 gdb 运行代码时,我得到如下输出:
程序收到信号 SIGSEGV,分段错误。
/lib/libc.so.6 中的 strlen() 中的 0x009823a3
缺少单独的调试信息,使用:debuginfo-install glibc-2.9-2.i686 libX11-1.1.4-5.fc10.i386 libXau-1.0.4-1.fc10.i386 libXdmcp-1.0.2-6.fc10.i386 libgcc -4.3.2-7.i386 libstdc++-4.3.2-7.i386 libxcb-1.1.91-5.fc10.i386
谁能告诉我问题是什么?以及如何解决。
谢谢大家
【问题讨论】:
-
这不太可能与您的问题有关,但我认为
#include <iostream>被认为比#include "iostream"更好 -
两张图有区别吗?例如,一个明显更大吗?
-
接受文件名的 CImg 构造函数可能会引发异常 (bit.ly/6hYyoi)。此外,您没有检查 argc ,因此请查看 argv[1] 是否已定义。不确定是不是这样,有点猜测。您是否尝试在像 gdb 这样的调试器下运行它?如果它在 gdb 中捕获到异常,请键入“backtrace”以查看发生了什么。
-
您说的是后续运行完全相同的程序,只是参数不同?另外,您使用的是什么版本的 CImg?
-
ddnl.pgm是 PGM 图像文件还是其他什么?从 ux9i 的链接中,它尝试根据文件的扩展名确定图像类型。
标签: c++ segmentation-fault cimg