前提・実現したいこと
コンパイルは通るのですが、プログラムを実行すると
Segmentation faultとなります。
調べてみるとmallocなどを使うべきなのかと思っていますが、
上手くかけていません。
全体の目的としてはcfgファイルから2つの数値をweight1,2として取得し、
とある計算の引数にしようと思っています。
c初心者なのですが、どのような原因や対策があるのか教えて頂ければと思います。
該当のソースコード
cfgファイルから値を取得
parser.c
c
1#include <stdio.h> 2#include <string.h> 3#include <stdlib.h> 4 5void parse_sse_ng_config(float* weight1, float* weight2) 6{ 7 char values[100]; 8 char *filename; 9 long lines; 10 // read file 11 filename="sse_ng.cfg"; 12 FILE* fp = fopen(filename, "r"); 13 lines = fread(values, sizeof(values), 1, fp); 14 // read values from fp 15 sscanf(values, "%f %f", weight1, weight2); 16 fclose(fp); 17}
parser.cからweight1,2を参照して別の関数の引数とする
cost_layer.c
c
1#include "cost_layer.h" 2#include <string.h> 3#include <stdlib.h> 4#include <stdio.h> 5#include "parser.h" 6 7void parse_sse_ng_config(float* weight1, float* weight2); 8void forward_cost_layer_gpu(cost_layer l, network net) 9{//コード省略 10 } else if(l.cost_type == SSE_NG){ 11 float weight1 = 0.0; 12 float weight2 = 0.0; 13 14 parse_sse_ng_config(&weight1, &weight2); 15 sse_ng_gpu(~~~~~, weight1, weight2); 16 } else //コード省略 17
sse_ng.cfg
スペース区切りの数値2つ
50.0 2.0
##make コンパイル時
コンパイル時はこのような出力がでます。
もう一度makeをすると
make: Nothing to be done for 'all'.
となるので、コンパイルは通っています。
gcc -Iinclude/ -Isrc/ -DGPU -I/usr/local/cuda/include/ -DCUDNN -Wall -Wno-unknown-pragmas -Wfatal-errors -fPIC -fopenmp -Ofast -DGPU -DCUDNN -c ./src/cost_layer.c -o obj/cost_layer.o gcc -Wall -Wno-unknown-pragmas -Wfatal-errors -fPIC -fopenmp -Ofast -DGPU -DCUDNN -shared obj/gemm.o obj/utils.o obj/cuda.o obj/deconvolutional_layer.o obj/convolutional_layer.o ob ...............
###補足
cost_layer.cのparse_sse_ng_config(&weight1, &weight2);
をコメントアウトするとプログラムが通るので、
この部分が問題だと考えています。
parser.c内のchar values[100]の定義に問題があるのかもしれません。
補足情報(FW/ツールのバージョンなど)
ubuntu
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/06/08 08:32