0

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

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 信息元素创建新节点。

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

4

1 回答 1

4

在 thisif-else中,您p在每个块中声明一个新指针:

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

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

于 2013-06-09T15:26:15.993 回答