ビルドできても、実行でエラーが出る理由がわかりません。

[戻る]
けんけん 2002/01/11(金) 22:39:07
あるプログラムを作って、ビルドは何の問題もなくできるんですけど、
プログラムを実行しようとすると、
「不正な処理を行ったので強制終了します」
と出てしまいます。
この原因にはどのようなことが考えられるんでしょうか?

ちなみに、同じプログラムをUNIXを使ったパソコンで実行(ktermで)すると、
何の問題もなく実行されます。
(UNIXにしか通用しないようなプログラムは使っていません)

かなりの初心者で、初歩的な質問ですけど、よろしくお願いします。

coshat 2002/01/12(土) 01:49:52
GUI プログラムなのに printf を使っているとか・・・
ちゃんとコンソールプログラムにしてますか?

YuO [E-Mail] 2002/01/12(土) 05:25:38
ビルドでは,あくまで文法上のエラーが無い限りエラーは起きません。
ロジックなどのエラーはデバッグで取り除く必要があります。

デバッガでステップ実行などをしてみればよいでしょう。

けんけん 2002/01/12(土) 20:28:24
デバッガのこともよくわからないんですけど、
文法上エラーがなくて、どこにエラーがあるんでしょうか?

VisualC++のコンパイラだからできないと言うこともあるんでしょうか?
試しにフリーソフトの「LSIC(LCC?)」というコンパイラでやってみましたが、
きちんとできました。

参考までにどのようなプログラムかというと、

「「sample.txt」の内容に、行番号をつけるというものです」

#include <stdio.h>

void main(void)
{
 FILE *fp;
 char s[50][80];
    int i,j,m;

 fp=fopen("sample.txt","r");

 i=0;m=0;

    while(1){
 
 fgets(s[i], 79, fp); 

if(s[i][0]=='\n')break;

 i++;m++;
 }

 fclose(fp);

 fp=fopen("sample.txt","w");

 for(j=0 ; j<=m ; j++)
 {fprintf(fp,"%d: %s",j+1,s[j]);}

 fclose(fp);

}


(sample.txtの内容の例)
HELLO!!
Good morning!!


(実行後)
1:HELLO!!
2:Good morning!!
3:

です。
また、「sample.txt」はきちんとしたフォルダに存在しています。
よろしくお願いします。

toru [E-Mail] 2002/01/12(土) 22:19:54
Sample.txtの最終行に改行が無い場合にAccess Violationを引き起こして「不正な...」になりました。

kazuma 2002/01/13(日) 00:57:02
> また、「sample.txt」はきちんとしたフォルダに存在しています。

VC の統合環境から実行した場合はカレントディレクトリは、
実行ファイルのあるディレクトリにはなりません。(プロジェクトのあるディレクトリです)
大丈夫でしょうか?

デバッガを使えばどこで落ちているかすぐに分かるはずなんですが、
使い方が分からないというなら、せめて printf をはさむなりしてどこまで処理が進んでいるか調べてみては。

けんけん 2002/01/13(日) 21:58:43
[[解決]]
無事実行することができました。ありがとうございました。

古いスレッドには追加発言できません。