gpt4 book ai didi

c++ - 无法初始化某些指针,在运行时中断程序

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

我一直在学习关于二叉树的教程,但我对模板和抽象类还是很陌生。

我声明了 3 个指向节点结构的指针,*current、*trail 和 *newNode,然后分配它们。

当然,我尝试在声明时将这 3 个指针设置为 nullptr,但它会在运行时中断该行上的程序。

我得到的错误是:

“使用了可能未初始化的局部指针变量‘trail’。”

使用了未初始化的局部变量“newNode”。

函数:

template<class elemType>
void searchTree<elemType>::insert(const elemType& item)
{
nodeType<elemType> *current, *trail, *newNode;
newNode->info = item; // Cant assign, first error
newNode->leftLink = NULL;
newNode->rightLink = NULL;
if (root == NULL)
root = newNode;
else
{
current = root;
while (current != NULL)
{
trail = current;
if (current->info == item)
{
cout << "Item is already in tree, no duplicates." << endl;
return;
}
else if (current->info > item)
current = current->leftLink;
else
current = current->rightLink;
}
if (trail->info > item) // second error
trail->leftLink = newNode;
else
trail->rightLink = newNode;

}

}

我已经在这里了:Potentially uninitialized local pointer variable 'node' used. C++

我尝试了所有建议,包括

#pragma warning(disable : 4703)

但指针仍未初始化,它仍然在那条线上中断。

如有任何建议(或指点),我们将不胜感激。

最佳答案

我认为指针也很陌生

nodeType<elemType> *current, *trail, *newNode;

此时 newNode 没有任何值(value),它“指向”无意义的地方

newNode->info = item;

此时你使用了无意义的newNode值。这是您的编译器警告的内容。

你需要做的是这样的

nodeType<elemType> *current, *trail, *newNode;
newNode = new nodeType<elemType>(); // make newNode point at a new node
newNode->info = item;
newNode->leftLink = NULL;
newNode->rightLink = NULL;

第二个警告是假的。编译器担心你永远不会执行 while 循环体,所以 trail 可能不会被初始化。但是按照您编写代码的方式,while 循环将始终至少执行一次。要删除警告,您可以将 while 循环重写为 do ... while 循环。

    do
{
trail = current;
if (current->info == item)
{
cout << "Item is already in tree, no duplicates." << endl;
return;
}
else if (current->info > item)
current = current->leftLink;
else
current = current->rightLink;
}
while (current != NULL);

这样编译器就会知道 trail 正在初始化。

关于c++ - 无法初始化某些指针,在运行时中断程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48473530/

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