【问题标题】:Malloc struct pointer errorMalloc 结构指针错误
【发布时间】:2016-03-28 13:13:12
【问题描述】:
#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。当我运行该程序时,它没有打印出任何内容,并说该程序已停止运行。但是如果我只是给 vertexList[0]->id 一个值而不是 vertexList[0]->str 并且只打印 vertexList[0],它会打印出“id is 5”......然后程序仍然停止。所以我认为我在 malloc 部分做错了什么? :/ 提前感谢您的帮助!!!

【问题讨论】:

  • 你为size分配空间指针(typedefs的乐趣)并且指针未初始化;它们指向任何东西(或者它们指向任何东西,如果你愿意的话)
  • 1) 不要typedef 指针。 2) 不要将malloc & friends 或void * 的结果投射到C 中。

标签: c pointers struct malloc


【解决方案1】:

做一个指针类型的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 不隐藏指针,只隐藏结构。

【讨论】:

    猜你喜欢
    • 2016-07-05
    • 2020-06-05
    • 2012-06-04
    • 2013-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-30
    • 1970-01-01
    相关资源
    最近更新 更多