• ベストアンサー

セグメンテーション違反

VC++からgccに移行してセグメンテーション違反が出るようになりました。VC++ではちゃんと動くのに、です…。 void enterData() { FILE *file_ptr; flights_record flights_array[25]; char in_string[10]; int index = 1; int repeat = TRUE; char ch; while(repeat) { printf("\nFlight ID => "); gets(flights_array[index].flightID); flights_array[index].recordNumber = index; printf("Enter more data (Y/N) => "); ch = toupper(getc(stdin)); putchar(ch); setbuf(stdin,NULL); index++; if(ch != 'Y') repeat = FALSE; fflush(stdin); } if((file_ptr = fopen("C:FLIGHTS.DTA","w+")) == NULL) { printf("Can't open filights file."); exit(0); } fwrite(flights_array, sizeof(flights_array), index, file_ptr); //←どうもここで止まるようです fclose(file_ptr); } 構造体の内容を"flightID"と"recordNumber"だけにして端折っていますが その他はそのままです。上のindex++;のせいかと思ってfwriteでindex-1にしても変わりません。 ちなみにVC++ではFLIGHTS.DTAが存在してても"w"だけで良かったのですがgccでは"w+"にしないと通りませんでした。 どこが怪しいところがあればご指摘戴けるとありがたいです。どうかよろしくお願いします。

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

  • ベストアンサー
  • moritan2
  • ベストアンサー率25% (168/670)
回答No.1

とまる行の sizeof(flights_array) は sizeof(flights_record) でないとだめだよね。

sucker
質問者

お礼

はい、そこを修正すると直りました! 似たような名前にするんじゃなかった。(←そういう問題じゃないですね(^^ゞ) もう昨日からずーーーっと悩んでたんですよ。4時間しか寝てないし。 これで先に進めそうです。これからUDPソケットで送信です! 本当にありがとうございました!

その他の回答 (1)

  • mac_res
  • ベストアンサー率36% (568/1571)
回答No.2

>fwrite(flights_array, sizeof(flights_array), index, file_ptr); fwrite(flights_array, sizeof(flights_record), index, file_ptr); の間違いでしょうか?

sucker
質問者

お礼

はい、ご指摘の通りです! もういろいろ調べまくったんですが、全然当てが外れてたということですね、自分。 でもVC++では本当に動くんですよ、これで。(笑) これでやっとWindows上で動いていたのと同じ状態になりました。 本当にありがとうございました!

関連するQ&A