2017-08-17 140 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