2017-11-26 20 views
0

初めてDDDを使用しています。問題の主題(UNIX環境ではc)にはとても慣れていないので、何か見落としている可能性があります。 通常のgccコンパイルでは発生しないファイルからfscanfを実行しようとすると、セグメント化エラーが発生します。機能は以下の通りである:DDD(データ表示デバッガ)を使用しているときのSIGSEV

void read_config(){ 
    FILE *fp; 
    fp = fopen("config.txt","r"); 
    fscanf(fp,"TRIAGE=%dDOCTORS=%dSHIFT_LENGTH=%dMQ_MAX=%d ",&data.triage,&data.doctors,&data.shift,&data.mq_max); 
} 

と関数fscanfラインを読んだ後、それはDDDに次のメッセージを与える:

プログラム信号SIGSEGV、セグメンテーション障害を受けました。 __isoc99_fscanfで0xb7e58e1e()/lib/i386-linux-gnu/lib.so.6

から、私はこの問題を引き起こしている可能性がありますかを把握することはできません。前もって感謝します!

+0

入力ファイルがscanfに合っていることと、引数として与えられたポインタが型に合っていること、そして格納する必要があるものを格納するのに十分な領域があること... Btw fgets + strtokを使用することが好ましい –

+0

ファイルが '現在のディレクトリに存在しないか、またはあなたがそれを読むことを許可されていませんか? (あなたの友人である) – wildplasser

+0

@wildplasserファイルは実行可能ファイルと同じディレクトリにあり、 'chmod(" config.txt "、0644);'を追加してアクセス権があることを確認しています注文。また、if(fscanf(fp、 "TRIAGE =%dDOCTORS =%dSHIFT_LENGTH =%dMQ_MAX =%d"、&data.triage、&data.doctors、&data.shift、&data.mq_max == EOF){ perror "ファイルから読み込めませんでした"); } ' – NUGA

答えて

0

この問題の原因を突き止めることはできません。

fpの値をデバッガで調べます。それはNULLになります。

常にの返信値を確認すると、すべてというシステム機能が呼び出されます。

ファイルは問題ではありません実行可能

と同じディレクトリにあります。あなたの電話番号はfopenです。

DDDconfig.txtが存在するディレクトリに変更するよう指示されていない限り、他のディレクトリからはDDDが実行されている可能性があります。

+0

それが問題でした。ありがとう!かなり恥ずかしいことは、そのようなルーキーミスでしたが、私はそれが再び良いことは起こりませんね。再度、感謝します。 – NUGA

関連する問題