2016-08-17 14 views
1

実行ボタンをクリックしてもプログラムを実行できないEclipse 10 NEON開発ツールでTDM-GCCを使用していますが、表示されませんコンパイル後にスローするエラーメッセージ。これは、実行されていないプログラムのWindows 10ダイアログを示しています。「問題によりプログラムが正常に動作しなくなりました.Windowsはプログラムを閉じて、解決策があれば通知します。私はprogramname.exeがWindows 10で作業中ダイアログを停止しました

#include<stdio.h> 

int first; 
int second; 
int *firstreference; 
int *secondreference; 

void calledbyvalue(int input); 
void calledbyreference(int *input); 

    void calledbyvalue(int input){ 

    //disabling the buffer 
    setbuf(stdout, NULL); 

    printf("Enter the first value - "); 
    scanf("%d", &input); 
    printf("Value entered for first is - %d", input); 
    printf("Entered input is - %d",input); 

    } 

    void calledbyreference(int *inputreference){ 

    //disabling the buffer 
    setbuf(stdout, NULL); 

    printf("Enter the second value - "); 
    scanf("%d", &inputreference); 
    printf("Value entered for second is - %d", inputreference); 
    printf("Entered input reference value is - %d",&inputreference); 

    } 

    void main(){ 

    *firstreference = &first; 
    *secondreference = &second; 

    //Calling user defined functions here .... 
    calledbyvalue(first); 
    calledbyreference(firstreference); 

calledbyvalue(second); 
calledbyreference(secondreference); 

} 
+1

これは、プログラムがクラッシュしたことを意味します。デバッガを実行して、動作中のクラッシュをキャッチして、コード内のどこにあるのかを調べる必要があります。デバッガでは、変数の値を調べて、クラッシュの原因を突き止めるのに役立ちます。 –

+1

あなたのコードは、コンパイラに多くの警告を出させなければなりません。もしそうでなければ、あなたはビルド設定を変更する必要があります。コンパイラの警告はコンパイラのエラーと同じくらい深刻ですが、何か間違ったことを示している可能性があります。*未定義の動作*を引き起こし、実行中にクラッシュする可能性があります。 –

答えて

1

一部

*firstreference = &first; 
*secondreference = &second; 

をランしようとしています

プログラムは、明示的な初期化と静的ポインタ変数の初期値である、NULLを逆参照することにより未定義の動作を呼び出します。そんなことしたらダメ。 firstsecondへのポインタを割り当てるために、また

firstreference = &first; 
secondreference = &second; 

を使用する一部

scanf("%d", &inputreference); 
printf("Value entered for second is - %d", inputreference); 
printf("Entered input reference value is - %d",&inputreference); 

scanf()に間違ったタイプを有し、printf()に間違ったタイプを有するデータを渡すオブジェクトへのポインタを渡すことによって、未定義の動作を呼び出します。何が欲しいのは、このことがあります

scanf("%d", inputreference); 
printf("Value entered for second is - %d", *inputreference); 
printf("Entered input reference value is - %d",*inputreference); 

もう一つ注目すべきは、あなたはいくつかの特別な持っていない限り、C89では違法と実装定義C99に以降の代わりにvoid main()のホスト環境で標準int main(void)を使用するべきであるということです非標準の署名を使用する理由。

関連する問題