皆様。お世話になっております。
まだ解決がつきません。
下記のコード
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);
}
10文字では足りなくないですか?
# そのせいかどうかはわからんが。
あ、ごめん。これが原因じゃないみたい。
fclose を本当にしていますか?
(ちゃんと、ひとつにファイルポインタごとに一回、実行されますか?)
該当ファイル名のファイルを
開いて即閉じるだけのプログラムを作って実行させたらどうなりますか?
> for (HnC=0;HnX<20;HnC++)
HnXって何?
> V1007.wav
> と言うファイルのオープン
> (要はHMOD=11,HnC=7の時)で
> fpがNULLになると言う現象が
HMOD=10でなくて?
ファイル名が上記のようならHMOD=11だとエラーでいい様な・・・
>何が悪いのか。。。
質問の仕方でしょうね
ソースの肝心のところが提示されていないように感じます。
少なくとも今回の場合には、ファイルのopenとcloseの個所が分かるようにすべきです。
提示する時には、まず、コピーペーストして、
その後に“明らかに余分なところ”だけを編集しましょう。
> HMOD=10でなくて?
> ファイル名が上記のようならHMOD=11だとエラーでいい様な・・・
>
なんで?
私にはなぜエラーになっていいのか理解できない。
> 私にはなぜエラーになっていいのか理解できない。
あ、引いてたのね。ってわし誰に答えてるんだろ・・・
この程度”.”じゃ無くて名のってつこんでよ。寂しいから。
まず、fopenが失敗した時にerrnoの値を調べましょう。
そうすれば、なぜfopenが失敗したのか分かります。
ループのどこかにcontinue;があってfcloseしてないとか。
>(要はHMOD=11,HnC=7の時)で
そんな時ってあるのかなぁ?
> for (HnC=0;HnX<20;HnC++)
ここで無限ループでしょ。
実は、この問題、問題のfopenの後に、
int n;
n=GetLastError;
を1つ入れてみたら、nの値は、
確かにエラーが起こらない時は0が返って来ていて、
NULLが返って来る時は、6が返っています。
そのnが6の意味することが
何かなあ、と思って
コマンドプロンプトで、
net helpmsg 6としてみると、
「ハンドルが無効です。」
と出て来るのです。
(net helpmsg 0は“正常に実行されましたです”です)
この「ハンドルが無効です。」は、勿論、
実際にファイルが存在した時の反応
(その時は6でなく300が返って来ます)
と違っており、
この「ハンドルが無効です。」というのは何を意味するのでしょうか?
もっと、調べたい時はどうすればいいのでしょうか?
だから・・・
http://www.microsoft.com/japan/support/kb/articles/94/9/99.asp
> net helpmsg 6としてみると、
なんの関係があるの?
ごめん、日本語わからない。