VC++6のユーザーです。
static FILE *fx;
int TraRec;
if (TraRec == 0)
if (fx = fopen(Formant.doc,rb) == NULL)
{
printf(Formant Frequency File's open error!!\n);
exit(4);
}
if (TraRec == 1)
if ((fx = fopen(Formant.doc,wb)) == NULL)
{
printf(Formant Frequency File's open error!!\n);
exit(4);
}
今はTraRec = 0;
の方が走って、
int GuessedWord;
int L1;
if ((L1 = fgetc(fx)) == EOF)
{
GuessedWord = 5;
goto InvDec;
}
InvDec:;
ここで、
if ((L1 = fgetc(fx)) == EOF)
に来た時、
ブレークポイントの設定位置0x77f75a58のエラー
L1 = fgetc(fx);
にしても同じ。
混合モードで見ると
77F75A40 ret 10h
77F75A43 cmp dword ptr [ebp-1Ch],0
77F75A47 je 77F75A51
77F75A49 push dword ptr [ebp-1Ch]
77F75A4C call 77F60A4A
77F75A51 ret
77F75A52 ret 4
77F75A55 int 3
77F75A56 int 3
77F75A57 int 3
77F75A58 int 3 ←
77F75A59 ret
77F75A5A mov edi,edi
77F75A5C int 3
77F75A5D ret
77F75A5E mov edi,edi
77F75A60 mov eax,dword ptr [esp+4]
77F75A64 int 3
どうすれば?
> if ((L1 = fgetc(fx)) == EOF)
> {
> GuessedWord = 5;
> goto InvDec;
> }
>
> InvDec:;
ここのgoto文て意味あるのでしょうか?
この処理は何度も行われるのでしょうか?
混合モードになる前に適当な位置にブレイクポイントを設定して、
ある程度、ステップ実行すべきです。
> 腹立つ、fputcをやった時点で、ストップ!
このようなタイトルはつけないほうが良いです。
見ただけで不快感を与えます。今後気をつけてください。
> このようなタイトルはつけないほうが良いです。
> 見ただけで不快感を与えます。今後気をつけてください。
同意。はなから質問を読む気も起きないです.....。
> if (fx = fopen(Formant.doc,rb) == NULL)
括弧が足りないから、
fx にはファイルポインタぢゃなく 0 か 1 が入っちゃうさぁ~。
あと、この停止のしかたを見るとスタックが破壊されているっぽい気がする。
提示コード以外のところでおぞましい呪いがかかっている予感。
>> if (fx = fopen(Formant.doc,rb) == NULL)
> 括弧が足りないから、
> fx にはファイルポインタぢゃなく 0 か 1 が入っちゃうさぁ~。
あらホント。その後fgetc(1)しちゃったらマシンから煙が上がっても文句言えないわ (^^
fx = fopen(...);
if ( fx == NULL ) { ... }
ってやっとけば何の問題もなかったのに。
# つか、 if (fx = fopen(Formant.doc,rb) == NULL) でwarning出たんじゃないのか?
>見ただけで不快感を与えます。
確かにいい心地はしない。
が、この程度でイチイチ反応してたら、日常生活に支障をきたすと思う。
>はなから質問を読む気も起きないです.....。
あなたも同類
確かに皆さんのおっしゃるとおりでした。
if ((fx = fopen(Formant.doc,rb)) == NULL)
としたら、なおりました。
私に不適切な発言がありましたことと、
あわせて、謝罪いたします。