以下代码是我为类成员函数实现的一部分,该函数租用了储物柜,从而在链表中创建了节点:
void SelfStorageList::rentLocker(Locker e) {
int count = 0;
LockerNode *p = head;
if (isEmpty()) {
head = new LockerNode(e, head);
tail = head;
}
LockerNode *prev = head;
LockerNode *curr = head->next;
for( ; curr != 0 && curr->objLocker.isVip; prev = prev->next, curr = curr->next) {
if(count == 1) {
if (e.isVip) {
if(p->objLocker.isVip) {
LockerNode *p = new LockerNode(e, p->next);
}
else {
LockerNode *p = new LockerNode(e,head);
}
}
//etc...
当我运行它时,我得到两个错误,我的* p指针可能未初始化。我不认为它们会造成任何类型的运行时错误问题,但只要错误持续存在,程序就无法编译。我想知道我可能对
的当前实现有什么替代方案LockerNode *p = new LockerNode(e, p->next);
和
LockerNode *p = new LockerNode(e,head);
行。我希望他们做的就是使用e的传入信息元素创建新节点,在当前列出的锁定器之前或之后,取决于条件。
感谢您提供的任何帮助!让我知道发布代码的任何其他特定部分是否有用,虽然它非常冗长,所以我希望避免发布所有内容并将问题隔离到可管理的模块中。
答案 0 :(得分:4)
在此if-else
中,您在每个块中声明了一个新指针p
:
if(p->objLocker.isVip) {
LockerNode *p = new LockerNode(e, p->next);
}
else {
LockerNode *p = new LockerNode(e,head);
}
这些中的每一个都是范围的本地。它会导致内存泄漏,并且不会影响外部作用域的p
。