我正在尝试访问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;
}
答案 0 :(得分:3)
您还需要malloc()
questionName
,objectName
等等。但你也可以做一些更容易和更简单的事情,像这样使用strdup()
ptr->questionName = strdup("Does it have a tail?");
还有一件事,您需要检查malloc()
对NULL
的返回值。
注意:请不要在->
运营商周围使用空格,这看起来很糟糕。此外,与白色空间使用一致,使用它不是太少而不是太多。只有,与自己的风格保持一致。