以下代码在 Xcode 的指示行上有一个警告。
这个警告真的有效吗?
如果这是一个有效的警告,那是怎么回事?
如果此警告不正确,是什么导致 Xcode 在此行创建警告?
编辑:此外,为什么在出现警告的行上方的 while 循环中引用 prevPtr
时没有警告?
警告显示variable 'prevPtr' may be uninitialized when used here
它在 prevPtr->next = delPtr->next
我相信没有初始化变量是不可能到达这一行的。这将使该警告变得毫无意义。
void myEditor::deleteLine(int num)
{
Line *delPtr = head;
if (delPtr == NULL) {
return;
}
if (head->linenum == num) {
head = head->next;
}
else {
Line *prevPtr;
while (delPtr != NULL && delPtr->linenum != num) {
prevPtr = delPtr;
delPtr = delPtr->next;
}
if (delPtr == NULL) {
cout << "Line " << num << " does not exist." << endl;
}
else {
prevPtr->next = delPtr->next; // warning appears here
}
}
delete delPtr;
}
最佳答案
如果您在 Xcode 中使用“Product > Analyze”菜单项,它会向您显示有关此类警告的很多详细信息。这是我尝试时得到的结果(在对 Line
的定义做出一些假设之后):
在这种情况下,这似乎是分析失败:编译器没有认识到,对于运行零次的 while
循环,delPtr == NULL
(这会导致提前返回),或 delPtr->lineNum == num
,暗示 head->lineNum == num
(这会导致 else
block 不运行)。
话虽如此,读者并不清楚这段代码是否正确。建议重组您的代码以避免此警告。
关于您在编辑中添加的问题(“为什么在 while 循环中引用 prevPtr 时没有警告”):prevPtr
仅在循环中分配给。它没有被取消引用,所以这不是错误。
关于c++ - Xcode 中的警告不正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33061108/