• 締切済み

別のPCにファイルを移してコンパイルして実行するとsegmentation faultになる。

外のPCで正常に動いているプログラムを自分のノートPCでも動かそうと思いソースファイル等必要なものをディレクトリごと移しました。コンパイルはできましたが実行するとプログラムの開始の段階でsegmentation faultになってしまいます。他のPCでは正常に動いているコードなので間違いはないはずです。 cygwin環境です。 これはどういった原因で起こると考えられるでしょうか?

みんなの回答

  • kochory
  • ベストアンサー率45% (167/370)
回答No.2

#1です。 どうやら、cygwinではulimitでスタックサイズの変更はできないようですね。 アプリケーションごとにスタックサイズを指定するようです。 プログラムをコンパイルするときに、 gcc --stack **** (プログラム名) としてみてください。 ****に適当な数字を入れてください。 ulimitで見る限りスタックサイズは2043(KB)のようなので、 それより大きい値を指定してみてください。 (あと、一応、私の推測とは異なる原因でエラーが出ているかもしれないので、 そのプログラムは配列のサイズを十分小さくしたら正常に動くかどうか 確認してみてください。)

mago83
質問者

補足

小さい入力ファイルでは問題なく実行できるようなのでやはりメモリの問題のようです。 >gcc --stack **** (プログラム名) とすると、 unrecognized option '-stack' と出てしまいます。

  • kochory
  • ベストアンサー率45% (167/370)
回答No.1

おそらく、配列のサイズが大きすぎるのでしょう。 通常は、ユーザーごとに使用できるスタックサイズの上限が 決められていて、それを超えるサイズの配列を使うと Segmentation faultになります。 「外のPC」ではその制限がはずされていたのでしょう。 自分のPCで制限をはずすには、シェルのプロンプトから ulimit -s unlimited と打ち込んでください。 これで使用可能なスタックサイズが無制限になります。

mago83
質問者

補足

ありがとうございます。 >ulimit -s unlimited というコマンドを打ち込みましたが、 「bash: ulimit: stack size: cannot modify limit: Invalid argument」 と出てどうもだめなようです。

関連するQ&A