指针malloc失败

时间:2012-02-21 23:46:05

标签: c pointers malloc

我尝试定义一个节点结构,其中包含一个节点* next。我写了一个append(node* n)函数来在前​​一个节点旁边添加一个新节点,但是每次运行代码时,它都会给我一个seg错误。我的代码如下:

#include<stdlib.h>
#include<stdio.h>


typedef struct _log_t {
  struct _log_t* next;
}log_t;

void initi(log_t* l) {
  l = (log_t*)malloc(sizeof(log_t));
  l -> next = NULL;
}

void append(log_t* l){
  l->next = (log_t*)malloc(sizeof(log_t)); 
  l->next->next = NULL;
  l = l->next;
}

提前感谢您的帮助!

2 个答案:

答案 0 :(得分:6)

 l = l->next;

这条线没有按照你的想法行事 - 事实上,它没有做任何事情。

也许您希望将log_t *作为log_t**传递,或者返回新的log_t*

答案 1 :(得分:-2)

你取消引用一个你从未初始化的指针。这就是为什么它崩溃了:))

// OK (but you should check for malloc() failing, too!)
void initi(log_t* l) {
  l = (log_t*)malloc(sizeof(log_t));
  l -> next = NULL;
}

void append(log_t* l){
  // OK...
  l->next = (log_t*)malloc(sizeof(log_t)); 
  // BAD!!!!  l->next: allocated.  l->next->next: *NOT* initialized!
  l->next->next = NULL;
  l = l->next;
}

以下是我认为可能的意思:

log_t * append (log_t* l) {
  // Initialize the head
  if (l == NULL) {
    l = (log_t *)malloc(sizeof (log_t));
    l->next = NULL;
  }
  // Initialize a sub-node
  else {
    l->next = (log_t *)malloc(sizeof (log_t));
    l->next->next = NULL;
  }
  // Always return the head
  return l;
}