2016-12-09 18 views
-2
typedef struct stack 
{ 
    struct stack *ptr; 
    char* data; 
}*tStack; 

typedef struct{ 
    tStack top; 
}*tStack_ptr; 

void Sinit(tStack_ptr s) 
{ 
    s->top = NULL; 
} 

int main() { 
    //stack 
    tStack_ptr s; 

    Sinit(s); 

return 1; 
} 

トップにNULLを割り当てようとすると、セグメンテーションフォルトが発生します。 匿名の構造体と関係がありますか?スタックを初期化する際のセグメンテーションフォルト

+2

's'は初期化されていないポインタです。あなたは彼にいくつかの有効なメモリを指摘させる必要があります。 – mch

+0

これを以下に減らすことができます: 'struct foo {int bar; }; struct foo * ptr; ptr-> bar = 42; 'あなたは初期化されていないポインタを逆参照しています。 – melpomene

+4

typedefの背後にあるポインタを隠すことは一般的には悪い考えです。 – melpomene

答えて

0
tStack_ptr s; 

変数「s」はちょうどポインタが、システムはそれが指す構造体の任意のメモリをALLOCない{TSTACK *トップを}構造体への指摘です。

32ビットPCでは、sはメモリ内で4バイトをとります。これは 'int *'のように他のポインタと同じです。あなたはこのようtStack_ptrを定義することができます

typedef struct{ 
    tStack top; 
}tStack_ptr; 

をこれは単なる「セグメント・フォールト」、sturct TSTACKを解決するため、私はあなたが何をしたいかわかりません。

関連する問題