无法将顶点添加到链接列表

时间:2015-11-23 03:15:03

标签: c linked-list

我的add_vertex

有问题

在valgrind中我得到“未初始化的值是由堆分配创建的”错误

at 0x4C27A2E:malloc(vg_replace_malloc.c:270)

by 0x400892:add_vertex(graph.c:56)

typedef struct {
  char *dest_name;
  int cost;
} dest_cost;
typedef struct Node {
  char *name;
  dest_cost *destcost;
  int num_dest;
  struct  Node *next;
} Node;
typedef struct {
  int size;
  struct Node *node;
} Graph;

INITIALIZE GRAPH

void init_graph(Graph *graph) {
  if (graph != NULL)
    graph->size = 0;
}

ADD VERTEX

int add_vertex(Graph *graph, const char new_vertex[]) {
  Node *next, *temp, *new_node;
  int i;
  if (has_vertex(*graph, new_vertex))
    return 0;
  new_node = malloc(sizeof(Node));                  
  new_node->name = malloc(strlen(new_vertex) + 1);                      
  strcpy(new_node->name, new_vertex);                                   
  new_node->num_dest = 0;       
  if (graph->size != 0) {
    temp = graph->node;
    if (strcmp(temp->name, new_vertex) > 0) {
      new_node->next = temp;
      graph->node = new_node;
      graph->size++;
      return 1;
    }
    else for (i = 1; i < graph->size; i++) {
        next = temp->next;
        if (strcmp(next->name, new_vertex) > 0) {
          new_node->next = next;
          temp->next = new_node;
          graph->size++;
          return 1;
        }
    }
    temp->next = new_node;
    graph->size++;
    return 1;
  }
  graph->node = new_node;
  graph->size++;
  return 1;
}

ADDED:CLEAR GRAPH

void clear_graph(Graph *graph) {
  int i;
  Node *next, *n = graph->node;
  if (graph != NULL) {
    for (i = 0; i < graph->size; i++) {
      next = n->next;
      free(n);
      n = next;
    }
    free(graph);
  }
}

增加测试

Graph graph;
  const char *vertices_to_add[]= {"koala", "platypus", "snake", "salamander",
                                  "gecko", "frog", "dog", "hedgehog"};
  int i;
init_graph(&graph);

  for (i= 0; i < sizeof(vertices_to_add) / sizeof(vertices_to_add[0]); i++)
    add_vertex(&graph, vertices_to_add[i]);

  clear_graph(&graph);

0 个答案:

没有答案