2016-03-21 15 views
0

のエントリポイント関数の結果の交換:私はC言語でプログラムを以下しているセグメンテーションフォールト

#include<stdio.h> 

int main() 
{ 
    printf("Normal.\n"); 
    return 0; 
} 

int fff() 
{ 
    printf("Fun!\n"); 
    return 0; 
} 

は私がプログラムを実行すると、それは私を与えるように、それをコンパイルしたかった「楽しいです!」。私は私のプログラムをコンパイルするには、以下の行を使用:

gcc deneme.c -e fff -o deneme 

私は「deneme」という名前のプログラムを実行すると、私が得た:

Fun! 
Segmentation fault (core dumped) 

あなたが見ることができるように、私は私が望むものを得たが、理解していません"セグメンテーションフォールト"部分。理由は何ですか?

+0

を使用することができます_start'は、アセンブリルーチンです。 –

+0

どうすれば "segmentaion fault"がなくても同じようにコンパイルできますか? – ertugrul

+0

あなたの入力関数は 'void'型で、' _exit(ret) 'の呼び出しで終了します。ここで、' ret'は戻りコードです。 '-nostartfiles'でコンパイルする必要があるかもしれません。 –

答えて

1

入力機能としてfff()を指定しようとしていますが、はメインではなく、-eフラグで置き換えられています。返品タイプfffvoidに変更し、機能終了時に_exitに電話してください。それが置き換えられ、 ` -

void fff() 
{ 
    printf("Fun!\n"); 
    _exit(0); 
} 
0

Uはあなたが入力機能として`)( `FFFを指定しようとしているが、` -e`フラグが `main`に代わるものではありません

​​
+1

この回答にはすべての可能な点がありません。 OPはエントリーポイント機能の置き換えを尋ねています。 –

+0

エントリポイント機能を置き換えません。 – ertugrul

関連する問題