特定のループ回数でのfopenでエラーNULLが返る。 – プログラミング – Home

特定のループ回数でのfopenでエラー...
 
通知
すべてクリア

特定のループ回数でのfopenでエラーNULLが返る。

固定ページ 1 / 3

ふじ
 ふじ
(@ふじ)
ゲスト
結合: 22年前
投稿: 16
Topic starter  

皆様。お世話になっております。
まだ解決がつきません。
下記のコード
char fn[10];
にしても
char fn[40];
にしても。
少なくとも
open - close
のペアは合っているようだし、
関数の外でオープンしても、
内側でオープンしても、
下記のコードで同じように、
V1007.wav
と言うファイルのオープン
(要はHMOD=11,HnC=7の時)で
fpがNULLになると言う現象が
どのパソコンでも出るのです。
V1006.wavまでのオープンは順調に
出来ているのに。
そのV1007.wavと言うファイルは
間違いなくこのソースを実行する
directoryにあります。

結構、変数の宣言でメモリは使いこんではいるのですが、
RAM容量の違うどのパソコンでも出るのです。
その場所で、その現象が。
(一旦そこでその現象が出ると、エラー時の
 EXITをさせなくても、次の
 HMOD=11,HnC=8以降も全て、fpはNULLが返って来て
 全てエラーです)
困ったなあ。
こんなすぐに解決がつきそうな所で
10日もトラぶっている。
何が悪いのか。。。

==================
FILE *fp;
char fn[10];

for (HMOD=1;HMOD<100;HMOD++)
for (HnC=0;HnX<20;HnC++)

:::::::::::::::::::
:::::::::::::::::::
   sprintf(fn, V%02d%02d.wav, (HMOD-1), HnC);

if ((fp = fopen(fn, rb)) == NULL)
{
 exit(2);
}


引用解決済
トピックタグ
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 1301
 

10文字では足りなくないですか?
# そのせいかどうかはわからんが。


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 1301
 

あ、ごめん。これが原因じゃないみたい。


返信引用
たみあ
 たみあ
(@たみあ)
ゲスト
結合: 22年前
投稿: 57
 

fclose を本当にしていますか?
(ちゃんと、ひとつにファイルポインタごとに一回、実行されますか?)


返信引用
PAI
 PAI
(@PAI)
ゲスト
結合: 23年前
投稿: 359
 

該当ファイル名のファイルを
開いて即閉じるだけのプログラムを作って実行させたらどうなりますか?


返信引用
こん!
 こん!
(@こん!)
ゲスト
結合: 22年前
投稿: 49
 

> for (HnC=0;HnX<20;HnC++)

HnXって何?


返信引用
こん!
 こん!
(@こん!)
ゲスト
結合: 22年前
投稿: 49
 

> V1007.wav
> と言うファイルのオープン
> (要はHMOD=11,HnC=7の時)で
> fpがNULLになると言う現象が

HMOD=10でなくて?
ファイル名が上記のようならHMOD=11だとエラーでいい様な・・・


返信引用
REE
 REE
(@REE)
ゲスト
結合: 24年前
投稿: 240
 

>何が悪いのか。。。

質問の仕方でしょうね

ソースの肝心のところが提示されていないように感じます。
少なくとも今回の場合には、ファイルのopenとcloseの個所が分かるようにすべきです。

提示する時には、まず、コピーペーストして、
その後に“明らかに余分なところ”だけを編集しましょう。


返信引用
.
 .
(@.)
ゲスト
結合: 23年前
投稿: 37
 

> HMOD=10でなくて?
> ファイル名が上記のようならHMOD=11だとエラーでいい様な・・・
>
なんで?
私にはなぜエラーになっていいのか理解できない。


返信引用
こん!
 こん!
(@こん!)
ゲスト
結合: 22年前
投稿: 49
 

> 私にはなぜエラーになっていいのか理解できない。

あ、引いてたのね。ってわし誰に答えてるんだろ・・・
この程度”.”じゃ無くて名のってつこんでよ。寂しいから。


返信引用
dairygoods
 dairygoods
(@dairygoods)
ゲスト
結合: 23年前
投稿: 1421
 

まず、fopenが失敗した時にerrnoの値を調べましょう。
そうすれば、なぜfopenが失敗したのか分かります。


返信引用
どうすれば。。。2
 どうすれば。。。2
(@どうすれば。。。2)
ゲスト
結合: 22年前
投稿: 1
 

ループのどこかにcontinue;があってfcloseしてないとか。

>(要はHMOD=11,HnC=7の時)で
そんな時ってあるのかなぁ?
> for (HnC=0;HnX<20;HnC++)
ここで無限ループでしょ。


返信引用
ふじ
 ふじ
(@ふじ)
ゲスト
結合: 22年前
投稿: 16
Topic starter  

実は、この問題、問題のfopenの後に、
int n;

n=GetLastError;
を1つ入れてみたら、nの値は、
確かにエラーが起こらない時は0が返って来ていて、
NULLが返って来る時は、6が返っています。
そのnが6の意味することが
何かなあ、と思って
コマンドプロンプトで、
net helpmsg 6としてみると、
「ハンドルが無効です。」
と出て来るのです。
(net helpmsg 0は“正常に実行されましたです”です)
この「ハンドルが無効です。」は、勿論、
実際にファイルが存在した時の反応
(その時は6でなく300が返って来ます)
と違っており、
この「ハンドルが無効です。」というのは何を意味するのでしょうか?
もっと、調べたい時はどうすればいいのでしょうか?


返信引用
こん!
 こん!
(@こん!)
ゲスト
結合: 22年前
投稿: 49
 

だから・・・

http://www.microsoft.com/japan/support/kb/articles/94/9/99.asp

> net helpmsg 6としてみると、

なんの関係があるの?


返信引用
PAI
 PAI
(@PAI)
ゲスト
結合: 23年前
投稿: 359
 

ごめん、日本語わからない。


返信引用
固定ページ 1 / 3

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました