分段错误(core dumped)指针结构数据类型

时间:2017-07-29 17:05:48

标签: c++11 pointers struct

我正在尝试使用C

中的struct创建一个树
#include<stdio.h>
#include<stdlib.h>

struct node{
  int data;
  struct node * next, * left, * right;
};

struct node * createtree(int data){
  struct node * kosong = (struct node*)malloc(sizeof(struct node*));
  kosong->data = data;
  kosong->left = kosong->right = NULL;
  return kosong;
}

void printtree(struct node * tree){
  if(tree == NULL) return;
  printtree(tree->left);
  printf("%d ",tree->data);
  printtree(tree->right);
}

int main(){
  struct node * pohon = NULL;
  pohon = createtree(1);
  pohon->left = createtree(2);
  pohon->right = createtree(3);
  pohon->left->left = createtree(4);
  pohon->left->right = createtree(5);
  printtree(pohon);
}

每当我编译它时会出现分段错误。然后我尝试删除*下一个指针,它编译&amp;运行成功。我知道树不需要* next指针,但我不明白为什么它不会因为另一个相同的指针而编译。 感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

帮助您理解错误:

  • 函数createtree(int data)中的第一行:

    struct node * kosong = (struct node*)malloc(sizeof(struct node*));
    

    实际应该是

    struct node * kosong = (struct node*)malloc(sizeof(struct node));
    

    因为您正在为结构节点分配内存,而不是指向结构节点的指针。

这就是你的段错的真正原因。我编译代码只修复了这个错误,它工作得非常好。 当然你应该尝试初始化所有指针和变量,因为不这样做可能会以未定义的行为结束,这可能是任何事情,就像分段错误一样。