前提・実現したいこと
c++においてコアダンプが消えてくれず困っています。
プログラムは最後のclose(file)まで実行され、生成されるfileも中身は正しいのですが、
如何せんコアダンプが気持ち悪く質問した次第です。
発生している問題・エラーメッセージ
Segmentation fault (core dumped)
core ファイルの解析
GNU gdb (GDB) Red Hat Enterprise Linux 7.6.1-119.el7
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later http://gnu.org/licenses/gpl.html
[New LWP 145344]
Core was generated by `./a.out'.
Program terminated with signal 11, Segmentation fault.
.#0 0x00007f619eb04575 in ?? () from /lib64/libstdc++.so.6
Missing separate debuginfos, use: debuginfo-install glibc-2.17-317.el7.x86_64 libgcc-4.8.5-44.el7.x86_64 libstdc++-4.8.5-
44.el7.x86_64
(gdb) bt
.#0 0x00007f619eb in ?? () from /lib64/libstdc++.so.6
.#1 0x00007f619eb in std::basic_string<char, std::char_traits<char>, std::allocator<char> >::~basic_string() ()
from /lib64/libstdc++.so.6
.#2 0x00007f619e1 in __run_exit_handlers () from /lib64/libc.so.6
.#3 0x00007f619e1 in exit () from /lib64/libc.so.6
.#4 0x00007f619e1 in __libc_start_main () from /lib64/libc.so.6
.#5 0x00000000004 in _start ()
該当のソースコード
c++
1 35 #define N 256 2 37 using namespace std; 3 39 string gomi,gomi2; 4 40 double G1, G2; 5 41 double z_o1,z_w1; 6 43 double d1; 7 8 44 int main() 9 45 { 10 46 int skip1 = 13; 11 47 int skip2 = 1; 12 48 13 49 FILE *fin_o1=fopen("./O1.var","r"); 14 51 FILE *fin_w1=fopen("./W1.var","r"); 15 53 FILE *fin_G=fopen("./out.Gnew","r"); 16 54 FILE *fout_j=fopen("./out.D","w"); 17 56 char moji[N]; 18 57 fgets(moji,N,fin_G); 19 58 rep(i, skip1) //for i=0 i < skip i++ 20 59 { 21 60 fgets(moji,N,fin_o1); 22 62 fgets(moji,N,fin_w1); 23 64 } 24 65 25 66 fscanf(fin_G,"%lf",&G1); 26 67 fscanf(fin_G,"%lf",&G2); 27 68 fclose(fin_G); 28 69 29 70 double a = 0.0, b = 0.0; 30 71 fscanf(fin_o1,"%s %s %lf", &gomi,&gomi2,&a); 31 72 fscanf(fin_o1,"%s %s %lf", &gomi,&gomi2,&b); 32 77 fclose(fin_o1); 33 73 z_o1 = a * G1 + b; 34 74 35 75 fscanf(fin_w1,"%s %s %lf", &gomi,&gomi2,&a); 36 76 fscanf(fin_w1,"%s %s %lf", &gomi,&gomi2,&b); 37 77 fclose(fin_w1); 38 77 z_w1 = a * G1 + b; 39 92 d1 = z_o1 - z_w1; 40 94 fprintf(fout_j,"%.10lf \n",d1); 41 96 42 97 fclose(fout_j); 43 98 return 0;
補足情報(FW/ツールのバージョンなど)
コンパイルは
g++ -O3 *.cpp
で行いました。
gcc version 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC)
回答2件
あなたの回答
tips
プレビュー