• ベストアンサー

セグメンテーション違反

C言語を使用しています。 構造体に値をいれようとしたら、コンパイルは出来るのですが、実行時に 「セグメンテーション違反です (core dumped)」 となってしまい、それ以上行えません。 構造体と代入したい変数との型は、合っています。 いろいろ本などで見ましたが、何が原因かわからず困っています。 教えてください。 宜しくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • tatsu99
  • ベストアンサー率52% (391/751)
回答No.2

OSは何でしょうか。コンパイラは何を使用していますか? 通常、デバッグオプションをつけて実行すると、異常の発生したソースの箇所で止まりますので、それが手がかりになります。またNo1の方が言われてますように、ソースが公開できるのであれば、ソースを提示するのが良いかと思います。

hyuruli
質問者

お礼

デバックをつけて、おかしいところを調べましたところ、やはり、すごく苦手なポインタと構造体を使っているところでした。 何とか、直すことが出来ました。 どうもありがとうございました!

hyuruli
質問者

補足

ありがとうございます。 OSはLinuxで、コンパイラは、そのLinuxについていたものです。 デバックを付けて、以上個所を調べてみようと思います。 ソースは、私の勝手で申し訳ないのですが、書くことが出来ません。すみません。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • neKo_deux
  • ベストアンサー率44% (5541/12319)
回答No.1

> 「セグメンテーション違反です (core dumped)」 多くの場合、プログラムの中で確保していないメモリの領域の値を取得/設定しようとした場合に発生します。 配列とか、ポインタとか使用していますか? あとは、質問者さんの環境、実際のソースコードがわかれば具体的なデバッグ方法を提示できるかも知れません。

hyuruli
質問者

お礼

ありがとうございます。 メモリ領域の問題が多いみたいですね。 配列、ポインタ共に使用しています。しかし、私はポインタに弱いので、そちらの方で何か間違っているのではないかと思います。 見直してみます。 ソースは書くことが出来ません。教えて頂いているのに、申し訳ありません。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • セグメンテーション違反について

    C言語であるプログラムを作っています。コンパイルは上手くできるのですが、実行するとセグメンテーション違反と出てしまいます。それもセグメンテーション違反と出るときと出ないときがあり困っています。そこでプログラム中のどこがセグメンテーション違反を指しているのか知りたいのですが、何かセグメンテーション違反の場所を教えてくれるようなオプションはないでしょうか? プログラムソースを見てもらうのが一番いいと思いますが、行数が1000行を超えているので断念しました。OSはLinuxでコンパイラはgccです。どなたかご教授お願いします。

  • セグメンテーション違反とは??

    linuxでC言語のプログラムを構築しています。 gccでコンパイルしたときにセグメンテーション違反という エラーが出てしまいます。 セグメンテーション違反とは一体なんの ことなんでしょうか? メモリのことだと思ってるんですが、原因がよくわかりません。C言語初心者なので わかりやすく教えて頂けるとありがたいです。

  • セグメンテーション違反について

    現在、FORTRANを使ってプログラミングを行っています。 プログラムを作って、コンパイルまではうまくいき、いざファイルを実行してみると、「セグメンテーション違反です」という文字が出てしまいました。 いったい何が原因でそのような現象が起こってしまったのでしょうか。 ご教授願えればと思います。

  • 圧縮プログラムを実行すると「セグメンテーション違反」と出る。

    プログラムをチェックして頂きたいのですが、煩雑なので時間に余裕のある方、お願いします。 使用OSはRED HAT LINUXです。 本に載っていたCのハフマン符号化プログラムをviで丸移しし、コンパイルしました。"プログラム名 圧縮対象データ名 圧縮後データ名"という形で実行するのですが、「セグメンテーション違反」と出てしまいます。使ったのは8kB程度のjpg画像でした。 原因をお教え願います。

  • C言語のキャストについて

    C言語のキャストについて こんばんわ、質問です。 『キャスト』と言われる型を合わせるルールがあると思います。 あれはコンパイラに 「違う型の変数への代入だけど、これは意図したことですよ」 ってことを分かってもらうための手段という認識でよろしいでしょうか? コンパイル後、実行時には変数の型情報は使われない(残ってない?)と 思っていますが、その道を極めている方、教えてください。 キャストが何に使われるのか知りたいです。

  • c++でセグメンテーション違反

    c++言語を勉強しているものです。 配列を関数の引数として扱うプログラムを作ろうとしているのですが、 コンパイルが通ったかと思えば実行すると 「セグメンテーション違反です」 と表示されて異常終了してしまいます。 原因がさっぱりわかりません。 OSはLinux(RED HAT ENTERPRISE LINUX 5)、コンパイラはg++(バージョン 4.1.2)です。 これがソースコードです。 #include <iostream> using namespace std; #define BUFSIZE 1024 #define MSG "msg" void test(char buf[]) { //bzero(buf,BUFSIZE); LEGACY memset(&buf, 0, BUFSIZE); sprintf(buf, "%s\n", MSG); cout << buf; cout << "(Terminated)" << endl; return; } int main() { char buf[BUFSIZE]; test(buf); return 0; }

  • fclose()でセグメンテーション違反

    C言語でのファイル読み込みで、ファイルを開いてデータを読み込んで表示することはできたのですが、最後のfclose(fp)でセグメンテーション違反になります。一番最後のwhileループをコメントアウトしたところセグメンテーション違反にはならなかったので、ここに何か問題があると思うのですが、どこが悪いのかが分かりません... #include<stdio.h> #include<stdlib.h> main(void){ FILE *fp; int i=0 , j=0 ,cnt = 0 , c=0; char *name="data.txt"; float *buf1,*buf2; if((fp = fopen(name,"r")) == NULL){ printf("error\n"); return 0; } else{ while((c = getc(fp)) != EOF) { if(c == '\n') cnt++; } printf(">>%d<<\n",cnt+1); rewind(fp); buf1 = (float *)malloc( (int)(cnt/2) +1); buf2 = (float *)malloc( (int)(cnt/2) +1); /*ここからがおかしい?*/ while(1){ if( fscanf( fp ,"%f %f",&buf1[i],&buf2[i])==EOF )break; printf("%f %f\n",buf1[i],buf2[i]); i++; } fclose(fp); } return 0; } なぜセグメンテーション違反になっているのでしょうか?

  • 構造体変数がないとメンバ操作できないのはなぜ?

    C言語の構造体に関して質問がありますが、structで型を作成して、構造体変数にてメンバの代入・参照をする。ということなんですが、なんでメンバ操作には構造体変数からでないといけないのでしょうか? 直接、型枠にてメンバ操作をすれば良いのに、なぜ構造体変数から操作しないといけないのでしょうか? 「クラス」や「オブジェクト」みたいに、一々ゼロから作成したり、コピペで作成しなくても済むように、このような形になっているのでしょうか? 回答の方よろしくお願いします。

  • 間接参照演算子(*)による値設定で、「セグメンテーション違反です」となる件について

     以下のコードは、GNU C++でコンパイル出来るのですが、実行時に 「セグメンテーション違反です」 と怒られてしまいます。  何ででしょうか? ============== #include <iostream> using namespace std; int main() { int i = 1; int* ip = 0; // ip = &i; // ←この行のコメントを外すと直ります *ip = 0; cout << "i: " << ip << endl; return 0; }

  • セグメンテーション違反

    OSはリナックスでC言語です。 #include<stdio.h> #include<stdlib.h> typedef struct{ int id; char *name; }user; int main(void) { user *users; int i,j; users=(user *)malloc(sizeof(user)*100); for(j=0;j<5;j++) scanf("%d",&(users+j)->id); scanf("%s",(users+j)->name); free(users); printf("input your id;"); scanf("%d",&i); printf("NO%d %s\n",(users+i)->id,(users+i)->name); return 0; } 上記のプログラムソースでセグメンテーション違反と出てしまいます。 原因はなんなのでしょうか。 教えていただければ光栄です。