2017-08-17 135 views
-10

我试着运行下列程序来使用gcc编译器输出bmp文件,但它显示错误:段错误(核心转储)。我努力解决这个问题,但没有任何改变。 此外,我想知道任何错误发生错误打开新的BMP图像。 FILE * infile;Linux上C语言中的段错误(核心转储)错误

FILE    *outfile; 

BITMAPFILEHEADER hf;   
BITMAPINFOHEADER hInfo;  
RGBQUAD   hRGBpal[256]; 
+0

另外,请注意'struct'成员的大小和字节顺序,比如'hInfo-> biSizeImage'它是以小端格式存储的'DWORD'类型。 –

+1

缩进*请*。 –

+0

C和C++是不同的语言。除非你特意询问他们之间的差异,否则不要标记两者。 – molbdnilo

回答

3

您正在阅读到未分配的指针

fread(&hf, sizeof(BITMAPFILEHEADER),1,infile); 
fread(&hInfo,sizeof(BITMAPINFOHEADER),1,infile); 

当读取到他们

编辑您需要分配内存以这些指针:你需要从阅读中删除&如果你打算读入使用malloc分配的指针,因为& hf将占用指针变量hf的地址而不是分配的内存地址

否则正如@ user0042所提到的那样,只是将它们声明为变量而不是指针,因此不需要为它们分配内存。

+1

_“你需要在读入这些指针时分配内存给这些指针”或者干脆忽略它们被声明为指针。 – user0042

+0

你能详细给我一个例子吗?我无法得到你所说的 – kookoo

+0

@kookoo相应地,只需要写'BITMAPFILEHEADER hf;'和'BITMAPINFOHEADER'。 – user0042