线路抑制状态错误 C4703 可能未初始化的局部指针变量"back"已使用

Line Suppression State Error C4703 potentially uninitialized local pointer variable 'back' used

本文关键字:变量 局部 指针 back 初始化 状态 错误 C4703 线路      更新时间:2023-10-16

我收到错误,指出我有一个可能未初始化的局部指针变量,我不确定为什么。

Link *popBck(Link *list, int &val) {
if (!list)return 0;
Link *front = list, *back;
while (front->ptr) {
back = front;
front = front->ptr;
}
val = front->data;
delete front;
back->ptr = 0;
return list;
}

您在此处不初始化back

Link *front = list, *back;

并且对back的唯一赋值可能无法执行,因为它是有条件的:

while (front->ptr) {   // This condition could be false...
back = front;      // ... in which case this doesn't happen.
front = front->ptr;
}

这将导致您在此处取消引用未初始化的back

back->ptr = 0;

最好始终初始化变量。

您还需要一个单一实例列表的特殊情况,您应该在其中返回空指针。

如果将back初始化为 null 指针,则当您的列表只有一个元素时,它将恰好为 null。

像这样:

Link *popBack(Link *list, int &val) {
if (!list) return nullptr;
Link *front = list, *back = nullptr;
while (front->ptr) {
back = front;
front = front->ptr;
}
val = front->data;
delete front;
if (!back)
{
return nullptr;
}
else 
{
back->ptr = 0;
return list;
}
}