2017-11-28 7 views
-1

CUPS印刷システムを作成しようとしています。私はプリンタの状態、何ページが何枚印刷されたかなどを知りたい。CUPS印刷ファイル分割エラー

これを行うには、私はCUPSの例で与えられたサンプルプログラムを実行している。

#include <cups/cups.h> 
#include <stdio.h> 


int main(){ 

int num_options; 
cups_option_t *options; 

cups_dest_t *dests; 
int num_dests = cupsGetDests(&dests); 
cups_dest_t *dest = cupsGetDest("name", NULL, num_dests, dests); 
int job_id; 

/* Print a single file */ 
job_id = cupsPrintFile(dest->name, "testfile.txt", "Test Print", num_options, options); 

cupsFreeDests(num_dests, dests); 

return 0; 
} 

私は./myout

を実行しようとすると私はラズベリー-PI 3を使用しています

セグメンテーションフォールト

を取得していますgcc myfile.c -o myout -lcups

を使用して、それをコンパイル私のCUPSサーバーとしてのボード。

ありがとうございます。

+0

gdbは開発環境に存在しますか? – lockcmpxchg8b

+0

@ lockcmpxchg8bはい。 – Sachith

+0

実行方法が分かっているなら、SIGSEGVで壊れてしまい、 'where'コマンドはsegvで実行された場所をスタックトレースします。デバッグモードでコンパイルする方がよいでしょう。 – lockcmpxchg8b

答えて

2

destが無効なアドレスを指しています。

cups_dest_t *dest; // declared but not initialized or assigned afterwards 

だから、UBで、セグメンテーション違反を引き起こす可能性があります(cupsPrintFile(dest->name ...)それを逆参照。


これは、あなたが(hereから取られた)、それを使用している必要があります方法です。

#include <cups/cups.h> 

cups_dest_t *dests; 
int num_dests = cupsGetDests(&dests); 
cups_dest_t *dest = cupsGetDest("name", NULL, num_dests, dests); 

/* do something with dest */ 

cupsFreeDests(num_dests, dests); 

更新:

あなたのコードは、(いくつかの変数を処理しません。つまり初期化されていない - 悪い)。最初に私が見るのはcups_option_t *options;です。すべての変数を注意してください。それがうまくいかない場合は、デバッグしてください。

int main(){ 

int num_options; 
cups_option_t *options; // add a call to "cupsAddOption("first", "value", num_options, &options);" 

cups_dest_t *dests; 
int num_dests = cupsGetDests(&dests); 
cups_dest_t *dest = cupsGetDest("name", NULL, num_dests, dests); 
int job_id; 

/* Print a single file */ 
job_id = cupsPrintFile(dest->name, "testfile.txt", "Test Print", num_options, options); // options is used here but is uninitialized 

cupsFreeDests(num_dests, dests); 

return 0; 
} 
+0

でも同じエラーが発生します。 – Sachith

+1

更新されたコードを表示 – CIsForCookies

+0

'options'と' num_options'の両方が初期化されていません... – lockcmpxchg8b