【发布时间】:2021-03-06 19:31:18
【问题描述】:
我有两种方法(布尔值和指针返回值)用于在 C 中搜索二叉树中的值:
bool findInTree(BTNode* bt, char* str) {
if (bt == NULL) {
return false;
}
if (strcmp(((Course*) (bt->data))->name, str) == 0) {
return true;
}
bool b1 = findInTree(bt->left, str);
if (b1) {
return true;
}
bool b2 = findInTree(bt->right, str);
return b2;
}
void* findAndReturnInTree(BTNode* bt, char* str) {
if (bt == NULL) {
return (void*) NULL;
}
if (strcmp(((Course*) (bt->data))->name, str) == 0) {
return bt->data;
}
void* b1 = findAndReturnInTree(bt->left, str);
if (strcmp(((Course*) (b1))->name, str) == 0) {
return b1;
}
void* b2 = findAndReturnInTree(bt->right, str);
return b2;
}
findInTree() 工作正常,并根据该值是否在树中返回正确的布尔值。但是,findAndReturnInTree() 不起作用,并且我不断收到分段错误。我试图用findInTree() 对其进行建模,但返回的是指针而不是布尔值。顺便说一句,我使用void 指针作为->data,以便我可以使用多个结构并具有某种通用实现。有人可以帮我解决这个问题吗?
【问题讨论】:
-
使用调试器。至少对于您自己和在 SO 上发布,您应该使用调试器找出触发 seg 错误的确切代码行。然后继续使用调试器跟踪代码。
-
这看起来像是个问题:
if (strcmp(((Course*) (b1))->name, str)。b1值来自findAndRetunInTree,它可以返回 NULL。所以应该在取消引用之前检查b1是否为NULL。同样,调试器会立即将您指向该行并向您显示b1是NULL。
标签: c pointers find binary-tree nodes