malloc结构指针错误

时间:2016-03-28 13:13:12

标签: c pointers struct malloc

#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);
}

嗨!我尝试使用malloc来获取Vertex数组。当我运行该程序时,它没有打印出任何内容,并表示该程序已停止运行。但是,如果我只给了vertexList [0] - &gt; id而不是vertexList [0] - &gt; str并且只打印了vertexList [0]的值,它将打印出来&#34; id是5&#34; ..然后程序停止了。所以我觉得我对malloc部分做错了什么? :/ /提前感谢您的帮助!!!

1 个答案:

答案 0 :(得分:5)

做一个指针类型的typedef通常是一个坏主意,因为你不知道什么是指针,什么不是,你最终弄乱了内存管理。

忽略Vertex typedef,然后执行:

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

其他一切都会融合在一起。

如果您认为struct vertex_t非常冗长,您可以这样做:

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

注意我的typedef不会隐藏指针,只隐藏结构。