以下代码在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;
}
答案 0 :(得分:3)
如果您使用Xcode中的“Product&gt; Analyze”菜单项,它会向您显示很多有关此类警告的详细信息。这是我尝试时得到的结果(在对Line
的定义做出一些假设之后):
在这种情况下,这似乎是分析失败:编译器没有认识到,while
循环运行零次,delPtr == NULL
(这会导致早期返回)或delPtr->lineNum == num
,暗示head->lineNum == num
(这会导致else
阻止无法运行。
话虽如此,读者并不清楚这段代码是否正确。建议重新构建代码以避免此警告。
关于您在编辑中添加的问题(“为什么在while循环中引用prevPtr时没有警告”):prevPtr
仅分配给循环。它没有被解除引用,所以这不是错误。