c++ - 行抑制状态错误 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;
}
解决方案
你不在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;
}
}
推荐阅读
- getstream-io - 如何为 Stream react-native 应用程序创建/编辑用户配置文件?
- javascript - 查找 Google Analytics onclick 事件跟踪代码脚本
- java - 移入 AppBarLayout (Android) 时,文本在 Recyclerview 中消失
- wordpress - Wordpress 自定义处理
- javascript - 如何在 UTC 中获取时间戳但没有时间?
- javascript - 让不和谐的机器人在被问到时说出规则
- math - 有多少种方法可以获得总计为 x 的连续整数之和?
- javascript - 双感叹号(!!)是否等于JS中的布尔构造函数?
- python - 保存加载和运行机器学习模型?
- r - 具有超过 2 个 data.frames 后缀的嵌套 full_join