访问struct中的指针并获取分段错误

时间:2016-11-22 22:20:10

标签: c

我正在尝试访问objectName和questionName,并且我一直遇到分段错误。当我使用char数组时,它只打印questionName而不是objectName。我已经为所有内容分配了内存,所以它必须与我如何访问这些指针有关。如果有人能解释为什么我会得到一个很好的分段错误。

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

struct node 
{
 char *objectName;
 char *questionName; 
 struct node *left_ptr;
 struct node *right_ptr; 
 };

void treePrint(struct node *ptr) 
{
 if (ptr == NULL)
 {
  return;
 }
 else 
 {
  if (ptr -> questionName != NULL)//ptr is a question 
  {
    printf("question: %s\n", ptr -> questionName);

  //now print the yes and no subtrees:
    treePrint(ptr->left_ptr);
    treePrint(ptr->right_ptr);
  }
   else 
  { // ptr is an object
   printf("object: %s\n", ptr -> objectName);
  }
 }
}



int main(int argc, char const *argv[])
{ 

 struct node *firstquestion = malloc(sizeof(struct node));
 struct node *secondquestion = malloc(sizeof(struct node));

 struct node *firstObject = malloc(sizeof(struct node));
 struct node *secondObject = malloc(sizeof(struct node));
 struct node *thirdObject = malloc(sizeof(struct node));

 strcpy(firstquestion -> questionName, "Does it have a tail?");
 strcpy(secondquestion -> questionName, "Is it round and edible?");

 strcpy(firstObject -> objectName, "A pangolin");
 strcpy(secondObject -> objectName, "Mandeep");
 strcpy(thirdObject -> objectName, "Orange");

 firstquestion -> left_ptr = firstObject;
 firstquestion -> right_ptr = secondquestion;
 secondquestion -> left_ptr = thirdObject;
 secondquestion -> right_ptr = secondObject;


 treePrint(firstquestion); 

  return 0;
}

1 个答案:

答案 0 :(得分:3)

您还需要malloc() questionNameobjectName等等。但你也可以做一些更容易和更简单的事情,像这样使用strdup()

ptr->questionName = strdup("Does it have a tail?");

还有一件事,您需要检查malloc()NULL的返回值。

注意:请不要在->运营商周围使用空格,这看起来很糟糕。此外,与白色空间使用一致,使用它不是太少而不是太多。只有,与自己的风格保持一致。