潜在的未初始化的本地指针变量 - 替代?

时间:2013-06-09 15:20:25

标签: c++ linked-list

以下代码是我为类成员函数实现的一部分,该函数租用了储物柜,从而在链表中创建了节点:

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的传入信息元素创建新节点,在当前列出的锁定器之前或之后,取决于条件。

感谢您提供的任何帮助!让我知道发布代码的任何其他特定部分是否有用,虽然它非常冗长,所以我希望避免发布所有内容并将问题隔离到可管理的模块中。

1 个答案:

答案 0 :(得分:4)

在此if-else中,您在每个块中声明了一个新指针p

if(p->objLocker.isVip)  {
   LockerNode *p = new LockerNode(e, p->next);
 }
 else {
   LockerNode *p = new LockerNode(e,head);
 }

这些中的每一个都是范围的本地。它会导致内存泄漏,并且不会影响外部作用域的p