適切

2011-07-18 8 views
1
// creating a struct to store number of cd's, titles, and count 
struct CD_type_node 
{ 
    int cd_number; 
    char title[20]; 
    int count; 
    struct CD_type_node* next; 
}; 

struct CD_type_node* mylist = NULL; // declaring a struct of type CD_type_node 
struct CD_type_node* header;// head pointer for accessing linked list 
header = NULL; 

header = malloc(sizeof(struct mylist)); 
header = mylist; 

while(header != NULL) 
{ 
    header = header->next; 
} 

誰かが適切にリンクリストを作成する方法とイムがエラーになっ動的ので、メモリの割り当て方法を私に伝えることができ、リンクリストを作成する方法:不完全な構造体mylistに 『はsizeof「の無効なアプリケーションを』適切

+3

あなたは 'sizeof(struct CD_type_node)'を意味しないのですか? –

+0

ああ、あなたは私にそれを打つ、dark_charlie。 – Patrick87

+0

私が間違っていると誰かが私を修正しますが、あなたが作成した新しいメモリに 'header'を割り当てると、それを' mylist'に再割り当てします。これはNULLです。あなたはメモリリークを作成していませんか?多分あなたはmylocをmylistに割り当てようとしました。 – Grambot

答えて

2

あなたはsizeof(struct CD_type_node)を使用する必要があります。

3

mylistはタイプ持つ変数であるため、あなたの問題はここに

header = malloc(sizeof(struct mylist)); 

です、

header = malloc(sizeof(struct CD_type_node)); 

しかしstruct mylistがあるように

header = malloc(sizeof(*mylist)); 

は大丈夫です間違っている:それはタイプを抽出することができ、そこから型や変数のいずれかを指していません。

+0

mylistはCD_type_nodeへのポインタなので、sizeof(mylist)は間違っていると思います...インスタンスではありません。 – Patrick87

+0

@トーマス:正しいです...それを修正してください。 – dmckee

2

私は、フォームのこの種の機能にノード作成を抽出したい:便宜上

void AddNode(struct CD_type_node **head) 
{ 
    struct CD_type_node *newNode = malloc(sizeof(struct CD_type_node)); 
    newNode->next = *head; 
    *head = newNode; 
} 

をあなたはおそらく構造体の他の分野に渡し、記入して、このルーチンを取得したいですそれらの値を持つ新しいノード。しかし、このルーチンでは、割り振りと次のポインターコードの実行方法がわかります。

+0

+1。完全に合意した。 –

+0

ありがとうございます – user793384