掲示板利用宣言

 次のフォームをすべてチェックしてからご利用ください。

 私は

 題名と投稿者名は具体的に書きます。
 課題の丸投げはしません。
 ソースの添付は「HTML変換ツール」で字下げします。
 返信の引用は最小限にします。
 環境(OSとコンパイラ)や症状は具体的に詳しく書きます。
 返信の付いた投稿は削除しません。
 マルチポスト(多重投稿)はしません。

掲示板1

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    記事検索    ログ    タグ一覧

No.7608

main()がぐるぐるまわり、プログラム終了しない現象ですが
投稿者---古い初心者(2007/06/25 17:07:37)


みなさんお世話になっております。
最近下記のようなmain()を書いて
int main( int argc, char *argv[])
MS XPのコマンドプロンプトで実行しまして、
return -1 や return 0のところで終了させようとしても、再びmain()の頭から再実行してしまいます。どんなリターン値に設定すれば、再起動しなくなるのでしょうか


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:main()がぐるぐるまわり、プログラム終了しない現象ですが 7609 bugs 2007/06/25 18:49:43
<子記事> Re:main()がぐるぐるまわり、プログラム終了しない現象ですが 7610 たかぎ 2007/06/26 00:22:49


No.7609

Re:main()がぐるぐるまわり、プログラム終了しない現象ですが
投稿者---bugs(2007/06/25 18:49:43)


書かれたコードを全部見せてください。


この投稿にコメントする

削除パスワード

No.7610

Re:main()がぐるぐるまわり、プログラム終了しない現象ですが
投稿者---たかぎ(2007/06/26 00:22:49)
http://www.kijineko.co.jp/


>return -1 や return 0のところで終了させようとしても、再びmain()の頭から再実行してしまいます。どんなリターン値に設定すれば、再起動しなくなるのでしょうか

ソースを見ないとはっきりわかりませんが、スタックを破壊している可能性があります。配列の範囲を超えた書き込みとか、やっていませんか?



この投稿にコメントする

削除パスワード

No.7611

Re:main()がぐるぐるまわりに関する補足情報(+どんなリターン値にすればいいですか)
投稿者---古い初心者(2007/06/26 09:30:58)



この現象はMSのVisual studio(VC++6.0)のdebug状態にてstep by step実行する時に発生するのです。
スタック破壊される問題があるかも知れません。
いまソースコードをレビューしています。
また、int main()が完全にリソースを解放してから終了したい場合、
どんなリターン値を設定すればいいのでしょうか。
というのは繰り返しmain()の先頭から実行されるのはmain()のreturn値にも関係あるのでないかと思いますが。
そもそもmain()の終わりはアプリケーションを全部終了するという意味で、それにリターン値を持たせる必要性に理解できていないんです。 -\-;












>>return -1 や return 0のところで終了させようとしても、再びmain()の頭から再実行してしまいます。どんなリターン値に設定すれば、再起動しなくなるのでしょうか
>
>ソースを見ないとはっきりわかりませんが、スタックを破壊している可能性があります。配列の範囲を超えた書き込みとか、やっていませんか?




この投稿にコメントする

削除パスワード

No.7614

Re:main()がぐるぐるまわりに関する補足情報(+どんなリターン値にすればいいですか)
投稿者---YuO(2007/06/26 11:02:28)


いい加減,
>返信の引用は最小限にします。
を守ったらどうでしょうか。


> スタック破壊される問題があるかも知れません。

まずはその「あるかもしれない」状態をなんとかしましょう。
スタックが破壊されれば,mainが再帰することも可能性として十分あり得ます。


>また、int main()が完全にリソースを解放してから終了したい場合、
>どんなリターン値を設定すればいいのでしょうか。

どんな値でも良いです。リソースを解放するのはプログラマの責任ですから。
まぁ,成功終了時にはEXIT_SUCCESSを,失敗終了時にはEXIT_FAILUREを返すのが良いかもしれません。


>というのは繰り返しmain()の先頭から実行されるのはmain()のreturn値にも関係あるのでないかと思いますが。

関係あると思った根拠は何でしょうか。
予想を書く前に,return値を変化させてみるのが先です。


>そもそもmain()の終わりはアプリケーションを全部終了するという意味で、それにリターン値を持たせる必要性に理解できていないんです。 -\-;

特定の環境において,mainの戻り値はプログラムの成功・失敗や失敗の理由を外側に伝えるために使われます。
Windowsもその機能を持っており,コンソールアプリケーションではよく0が成功,1以上が失敗というように使われています。
ただし,Windowsそのものはその値を判定するようなことはしていませんが,
バッチファイルではその値を利用する場合がありますし,makeなどはその値で成功・失敗を判定します。



この投稿にコメントする

削除パスワード

No.7616

Re:main()がぐるぐるまわりに関する補足情報(お礼+可能性のある原因をご報告)
投稿者---古い初心者(2007/06/26 11:50:05)


YuO様
丁寧なご指導有難う御座います。
main()が繰り返し実行されたのはMS-visual studioのせいかもしれません。
というのはいったんMS-visual studioを終了して再起動して、debugモードで実行したら、そういう現象がなくなりました。
また、推測ではありますが、
なぜ、MS-visual studioがそういう現象を起こしたかというと、
おそらく、前のプログラム実行終了する時、
不都合なdeconstructorの実行でvisual studioを破壊したのではないか
と思います。
その不都合なdeconstructorとはずいぶん前に設計したもので、
確保していない領域を解放していまいました。
設計当時はそのメモリを必要として必ず確保されるのだが、
後々になって、不要になって、メモリの確保文を消しました。

ところが目立たないdeconstructorの中の目立たない処にそれに対するdelete[]を発行しています、、、
どんなエラーメッセージもでなくて、ずーと気づかなくて"うまく"実行していました。


また宜しくお願い申し上げます。





この投稿にコメントする

削除パスワード

No.7617

Re:main()がぐるぐるまわりに関する補足情報(お礼+可能性のある原因をご報告)
投稿者---wiz(2007/06/26 13:21:20)


>main()が繰り返し実行されたのはMS-visual studioのせいかもしれません。
この根拠が気になりますが。。。
かもしれません、で、良いのでしょうか?
本人が良いなら良いですが。。。
この様な質問の場合、何を行ってどうなったのかが分からないと、
回答する人には何が何だかさっぱり分かりません。
相手が分かっている前提で話を進めると、結局、
「そうですか。」としかいえないと思います。

>debugモードで実行したら、そういう現象がなくなりました。
VCのDebugモードではメモリ領域確保時に前後4バイトの
補助領域を設けます。
もしもこの領域が破壊されればメモリ破壊だと分かるわけですが、
いままで、破壊した時点で止まっていたプログラムがこの補助領域に
よって動作している可能性もあります。

結局Releaseモードで動いているのでしょうか?
もしもReleaseで動いていないのなら、
>不都合なdeconstructorの実行でvisual studioを破壊した
と考えるのは難しいと思いますが。。。



この投稿にコメントする

削除パスワード

No.7618

Re:main()がぐるぐるまわりに関する補足情報(お礼+可能性のある原因をご報告)
投稿者---古い初心者(2007/06/26 17:33:29)


wiz様
ご教授ありがとうございます。
確かにDebugのモードで動いてて、releaseモードで動かなくなる経験よくありました。
それはご指摘の4byteの余裕メモリの存在によるもんですね。
(いい勉強になりました)
ただ、今回の場合、MS studio のDebugモードでstep by step的に実行する時に、
int main()の最後の"return 1;" を実行してから、
自動的にmain()の先頭に戻って再実行する現象に遭遇したわけです。

いったんMS visual studioを終了して再起動したら、そういう現象がなくなりました。
(問題発生した時にそもそもDebugモードだったのです、、、)

また宜しくお願い致します。









この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    記事検索    ログ    タグ一覧





掲示板提供:(有)リアル・インテグリティ