gpt4 book ai didi

c - 是什么导致段错误?

转载 作者:太空宇宙 更新时间:2023-11-04 08:43:20 25 4
gpt4 key购买 nike

我正在编写递归打印出链接在一起的节点字符的代码。这些节点链接在一起创建一个“映射”(只是从结构到其他节点的指针)。结构实现如下:

typedef struct Node *node_ptr;

struct Node{
char ch;
node_ptr firstPtr;
node_ptr secondPtr;
node_ptr thirdPtr;
};

现在,我需要打印出 x 步的节点。我从存储在 int 变量中的控制台获取此值并将其传递给函数。我也传递了一个指向节点的指针。此函数实际上打印出正确的输出,但有两个小错误。

例如,我有一个名为“A”的节点。 “A”的 ch 字段是“A”,我拥有 ch 字段的每个节点都将是我称之为节点指针的字母,以使其简单。我想要的一个简单示例如下:

节点A:

   ch -> 'A'; 
A->firstPtr = B;
A->seondPtr = NULL;
A->thirdPtr = NULL;

节点 B:

   ch = 'B'. 
B->firstPtr = A;
B->secondPtr = C;
B->thirdPtr = F;

所以,如果我用户输入 A 并且距离为 2,它应该打印出:B、C、F。

我编写的递归函数执行此操作,但也打印出 A。这很可能是因为 B 也指向 A 并且它也将其打印出来,但我认为我处理了这种情况并且它仍然这样做。此外,它在程序末尾给出了一个段错误,我也不确定为什么。这是递归函数:

 void print_levels(int dist, node_ptr aNode){
if(dist == 0){
// if int is zero, do nothing we are done.
}
else{
/*
if there is pointer (doesn't point to NULL) and if the Node it's pointing
to does not have the same "ch" as the current Node.
*/
if(aNode->firstPtr && !(aNode->firstPtr->ch == aNode->ch)){
printf("%c\n", aNode->firstPtr->ch);
}
if(aNode->secondPtr && !(aNode->secondPtr->ch == aNode->ch)){
printf("%c\n", aNode->secondPtr->ch);
}
if(aNode->thirdPtr && !(aNode->thirdPtr->ch == aNode->ch)){
printf("%c\n", aNode->thirdPtr->ch);
}
print_levels(dist-1, aNode->firstPtr);
print_levels(dist-1, aNode->secondPtr);
print_levels(dist-1, aNode->thirdPtr);
}
}

我要问的是,为什么在我给出的示例中它也打印出 A,为什么这会导致段错误?我是 C 的新手,感谢所有的帮助和洞察力。

最佳答案

你打电话:

print_levels(dist-1, aNode->firstPtr);
print_levels(dist-1, aNode->secondPtr);
print_levels(dist-1, aNode->thirdPtr);

如果 aNode->firstPtr 等为 NULL,您应该在每个之前检查:

if (aNode->firstPtr != NULL)
print_levels(dist-1, aNode->firstPtr);
if (aNode->secondPtr != NULL)
print_levels(dist-1, aNode->secondPtr);
if (aNode->thirdPtr != NULL)
print_levels(dist-1, aNode->thirdPtr);

或者检查 print_levels 如果 aNode 为 NULL 并返回:

void print_levels(int dist, node_ptr aNode){
if (dist == 0 || aNode == NULL){

关于c - 是什么导致段错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22701162/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com