首页 > 解决方案 > 行抑制状态错误 C4703 使用了可能未初始化的局部指针变量 'back'

问题描述

我收到错误消息,我有一个可能未初始化的本地指针变量,我不知道为什么。

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;

}

标签: c++

解决方案


你不在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为空指针,那么当您有一个只有一个元素的列表时,它将为空。

像这样的东西:

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;
        }
}

推荐阅读