2016-03-28 7 views
1
#include <stdio.h> 
#include <stdlib.h> 

typedef struct vertex_t* Vertex; 
struct vertex_t { 
    int id; 
    char *str; 
}; 

int main(int argc, char* argv[]) 
{ 
    int size = 10; 
    Vertex* vertexList = (Vertex*)malloc(size * sizeof(Vertex)); 
    vertexList[0]->id = 5; 
    vertexList[0]->str = "helloworld"; 
    printf("id is %d", vertexList[0]->id); 
    printf("str is %s", vertexList[0]->str); 

    return(0); 
} 

こんにちは!私はVertexの配列をmallocしようとしています。私がプログラムを実行すると、何も出力されず、プログラムが実行を停止したことが示されます。しかし、vertexList [0] - > idではなく、vertexList [0] - > strではなく、vertexList [0]だけを出力した場合、 "id is 5"というメッセージが出力されます。だから、私はmallocの部分に何か問題があったと思いますか? :/助けを先にありがとう!Malloc構造体ポインタエラー

+0

あなたは 'size'のためのmalloc空間**ポインタ**(typedefsの喜び)そしてポインタは初期化されていません。彼らは何も指していません(あるいは、あなたが好きなら何でも指しています)。 – wildplasser

+1

1)ポインタを 'typedef'しないでください。 2)一般的に 'malloc'と' friend'の結果や 'void *'の結果をC言語でキャストしないでください。 – Olaf

答えて

5

ポインタ型のtypedefを行うのは、ポインタとは何か分からず、メモリ管理を混乱させるので、通常は悪い考えです。

Vertexのtypedefを無視し、単に実行します。

struct vertex_t* vertexList = malloc(size * sizeof(struct vertex_t)); 

そして、他のすべてが一緒にフィットします。

あなたはstruct vertex_tは非常に冗長であると思われる場合、あなたが行うことがあります。私のtypedefは、ポインタのみ構造体を隠していないか

typedef struct vertex_t Vertex; 
Vertex *vertexList = malloc(size * sizeof(Vertex)); 

注意を。