2016-12-28 17 views
-1

メイン関数で動作するコードがいくつかありますが、関数内で移動するとセグメンテーションフォルトでクラッシュしますか?違いは何ですか?同じコードはmain()では動作しますが、他の関数では機能しません

この作品:

#include <sys/capability.h> 
#include <sys/types.h> 

int 
main() { 


    cap_t caps; 
    caps = cap_get_proc(); 
    cap_flag_value_t * val; 
    cap_get_flag(caps, CAP_FOWNER, CAP_EFFECTIVE, val); 
    cap_free(caps); 


    return 0; 
} 

これは動作しません:

#include <sys/capability.h> 
#include <sys/types.h> 

void 
my_get_cap() { 
    cap_t caps; 
    caps = cap_get_proc(); 
    cap_flag_value_t * val; 
    cap_get_flag(caps, CAP_FOWNER, CAP_EFFECTIVE, val); 
    cap_free(caps); 
} 

int 
main() { 
    my_get_cap(); 
    return 0; 
} 
+1

常に 'gcc -Wall -Werror'を使用してください。初期化されていない 'val'を' get_get_flag() 'に渡すのを止めます。 –

+0

あなたの問題はまったく問題にはなりませんが、関数の空のパラメーターリストは、前世紀の80年代後半から時代遅れです。 – Gerhardh

答えて

1

あなたが初期化されていないcap_flag_value_t * val;からcap_get_flagへの呼び出しは、それに書き込み、それは/によってはクラッシュしない場合があります書き込まれたメモリ上の場所。これらの行を次のように変更してください:

cap_flag_value_t val; 
cap_get_flag(caps, CAP_FOWNER, CAP_EFFECTIVE, &val); 
関連する問題