gpt4 book ai didi

c++ - 奇怪的段错误

转载 作者:行者123 更新时间:2023-11-28 08:25:37 26 4
gpt4 key购买 nike

好吧,我正在做一项作业,但我终其一生都无法弄清楚为什么会出现这些段错误。我仍在学习 C++,一般来说是编程,所以我希望比我聪明的人能帮助我。该程序是一个自组织的二叉搜索树,直到现在我都没有遇到太大的困难。这是我用来测试我的类(class) BST 的主程序的开头,我无法更改 mian 程序,因为它是一项作业。

int main() {
string input;

// get a list of integer values
cout << "Enter a list of integer values in one line: ";
getline(cin, input);

cout << "\n**CHECKPOINT 1**\n";

// create a binary search tree
BST<int> bst1(input);


if (!bst1.empty()) {
cout << "\n**CHECKPOINT 2**\n";
cout << "Inorder traversal: ";
bst1.printInOrder();
cout << "Level order traversal: ";
bst1.printLevelOrder();

我还没有通过 printInOrder() 函数,这是它的代码

template <typename T>
void BST<T>::printInOrder(BSTNode* t) const
{
if (t->left != NULL)
printInOrder(t->left);
std::cout << " " << t->data << " ";
if (t->right != NULL)
printInOrder(t->right);
}

如果当我在 printInOrder 函数的第一行添加一个快速 cout<< "Something"时,打印行突然出现,这让我很困惑

cout << "Inorder traversal: ";

它还会开始打印树中的一些数字,最后再次给我一个段错误。 :/

所以,如果有人能向我解释 WTF 是怎么回事,我将不胜感激。添加或减去一个简单的 cout 行不应该改变这样的事情吗?另外,我觉得有更好的调试方法,如果有人有解决这些问题的技术,请分享 :) 提前致谢!

编辑: 我试过调试器 GDB,我无法弄明白,但我又不是很精通调试器的高级功能,所以我可能错过了一些东西。唯一运行的其他函数是从字符串输入构建的构造函数。从调试器中我可以看出,构造函数似乎工作正常,但仍然是代码

template <typename T>
BST<T>::BST(const std::string input, int th)
{
threshold = th;
root = NULL;
T v;
// Make Input String Stream for easy use of >> operator
std::istringstream iss (input);
do
{
iss >> v;
insert(v, root);
}while(iss.good());
}

编辑 2:

这是我插入函数的代码,感谢大家的帮助! :)

template <typename T>
void BST<T>::insert(const T& v, BSTNode *&t)
{
if(t == NULL)
{
t = new BSTNode;
t->left = NULL;
t->right = NULL;
t->data = v;
t->searchCount = 0;
}
else if( v < t->data )
insert(v, t->left);
else
insert(v, t->right);
}

最佳答案

您的输出中明显缺少换行符。通常,行缓冲意味着在遇到换行符之前您看不到任何内容。

我会将 PrintOnOrder 之后的行修改为:-

    cout << "\nLevel order traversal: ";

关于c++ - 奇怪的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4174651/

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