重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

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

私はアセンブラーのプログラム解析を行っています。アセンブラープログラムで2点疑問がありましたので質問いたします。
1.ファイルのclose命令が2重のコーディングされている。
close(xx)
close(xx)
xxは同じファイルです。
2.ファイルのclose命令がない状態でプログラムが終了している。
プログラムが終了する前にファイルのcloseを行うと思いますが、そのcloseがありません。
どちらのケースもコーディングミスと思いますが、実際にプログラムが停止、アベンドすることがない状態で動けるのでしょうか

A 回答 (5件)

>2.ファイルのclose命令がない状態でプログラムが終了している。


ならば、それが異常終了なのか、正常終了なのか…
それが答えでは?

>コーディングミスと思いますが、
正常に稼働しているのですか? 正常なら修正しない方が身のためだと思いますが…
    • good
    • 0
この回答へのお礼

ありがとうございます。

お礼日時:2024/11/29 07:59

>openしたり、createしたものは、closeしたり、destoryせずに、


>終了すると、メモリリークしますが、

いやさすがにプロセス終了すると、たいていのOSはファイルハンドルやメモリーは回収します。

質問には実行環境が何も書いてないから、とんでもない非常識も考えられますが・・・
    • good
    • 1
この回答へのお礼

ご回答ありがとうございます。OSがわからずに分析していることが恥ずかしいですが、頑張って仕事をします。

お礼日時:2024/11/29 07:58

ファイルのクローズをアセンブラで書けるCPUって知らないな。


マクロだろうか?

1.2重ク口―ズを許容するかはライブラリやマクロやosに依る。
2.直ぐ終わるようなプログラムならファイルのクローズをOSに任せるのは普通。OSに依るが何の問題も無いのが普通。
    • good
    • 0
この回答へのお礼

ありがとうございます。

お礼日時:2024/11/29 07:59

C言語ですかね?



1)一般的には、1回目のclose(xxx)は、0が戻り、2回目のclose(xxx)は、-1が戻ります。エラーハンドリングを行ってなければ、エラーは無視されます。

2)メモリリークします。OSを修了するまでは、開いたファイルは閉じられることはありません。場合によっては、そのソフトを2回目以降開いたときには、該当するファイルが開けない、となる場合もあります

C言語では、openしたり、createしたものは、closeしたり、destoryせずに、終了すると、メモリリークしますが、一般的にポインタの概念のないプログラミング言語では、プログラムが修了する時点で、インタプリタや、JIT、VMなどが、メモリパージを実行されるので忘れがちです。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

お礼日時:2024/11/29 07:59

あなたのいう「アセンブラー」ってなんですか?



私の知る限りにおいて「ファイルをクローズする命令」を持つアセンブリ言語はないように思うんだけど.

あるいは, なんらかの言語で書かれた「アセンブリ言語を翻訳するプログラム」という意味のアセンブラーのこと? もしそうであるなら, そのアセンブラーがどのような言語で書かれているのか, そしてどのような OS で動くのかに依存する話.
    • good
    • 4
この回答へのお礼

助かりました

お礼日時:2024/11/23 13:00

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

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A