2016-08-30 10 views
2

私は初心者で、Cの本を読んでいます。構造体のポインタについて質問があります。私の下 はおそらくばかな質問「* p」のポインタポインタで構造体のメンバを初期化する(C)

#include <stdio.h> 

struct part{ 
int num; 
char *name; 
}; 

int main() 
{ 
    struct part *p; //creating a pointer with 'struct part' type 

    p->num= 5;   //initializing 
    p->name= "Jose"; 

    printf("%d\n",p->num); 
    printf("%s",p->name); 

    return 0; 
} 

を使用して構造体のメンバを初期化しようとしたが、私はそれが間違っている理由を知って興味ですか?プログラムは明らかにクラッシュしています。

答えて

1

struct part *p = malloc(sizeof(struct part)); 

ような何かを行います。

p = malloc(sizeof(struct part))、またはstruct part q; p = &q;などとするか、それ以外の場合は最初に何かを指すように設定します。

this old classicのCバージョンを確認してください。

+0

助けてくれてありがとう。私は質問としてあなたに尋ねることができます.. 'struct part'型にポインタをセットすると、この情報はポインタ変数が占めるメモリ内のスペースの量をコンパイラに知らせません。なぜmallocを明示的に行う必要がありますか? – tadm123

+0

@ tadm123私はそれに答える前に:ビデオを見ましたか? –

+0

さて、ちょうどそれを見ました。私は今見ます、彼らは何も指していないとあなたは何も値に与えることはできませんね...ありがとう、良いビデオも笑 – tadm123

1

ポインタが初期化されていません。それはあなたがそれを介して構造体メンバを参照することはできませんので、有効なメモリを指しません。あなたはポインタを宣言したが、何を、それdoesntのポイント - (より良い本を探して?これはこのCの本の中で、実際の例の場合)

+0

これを試してみてください。しかし、助けを感謝し、私は今なぜ見ることができます。 – tadm123

0
#include <stdio.h> 
#include <stdlib.h> 

struct part 
{ 
    int num; 
    char *name; 
}; 

int main() 
{ 

struct part *p = (struct part*)malloc(sizeof(struct part)); //memory allocation 

p->num = 5; 
p->name = "Jose";   //initializing 

printf("%d\n", p->num); 
printf("%s", p->name); 

return 0; } 

それはちょうど私が別のコードを書い概念の裁判/エラーをやってしようとしているいや

関連する問題