電子書籍の厳選無料作品が豊富!

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

これはどういった原因で起こると考えられるでしょうか?

A 回答 (2件)

#1です。


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

この回答への補足

小さい入力ファイルでは問題なく実行できるようなのでやはりメモリの問題のようです。

>gcc --stack **** (プログラム名)
とすると、
unrecognized option '-stack'
と出てしまいます。

補足日時:2005/11/25 10:41
    • good
    • 0

おそらく、配列のサイズが大きすぎるのでしょう。



通常は、ユーザーごとに使用できるスタックサイズの上限が
決められていて、それを超えるサイズの配列を使うと
Segmentation faultになります。
「外のPC」ではその制限がはずされていたのでしょう。

自分のPCで制限をはずすには、シェルのプロンプトから

ulimit -s unlimited

と打ち込んでください。
これで使用可能なスタックサイズが無制限になります。

この回答への補足

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

補足日時:2005/11/24 20:48
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!