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 ポインターが初期化されていない可能性があるという 2 つのエラーが発生します。それらが実行時エラーの問題を引き起こすとは思いませんが、エラーが続く限りプログラムはコンパイルされません。の現在の実装に代わるものは何かと思っていました

LockerNode *p = new LockerNode(e, p->next);

LockerNode *p = new LockerNode(e,head);

行。条件に応じて、現在リストされているロッカーの前または後に、渡された e の情報要素を使用して新しいノードを作成するだけです。

助けてくれてありがとう!コードの他の特定の部分を投稿すると役立つかどうかを教えてください。非常に長いので、すべてを投稿して問題を管理しやすいモジュールに分離することは避けたいと考えていました。

4

1 に答える 1

4

このでは、各ブロックでif-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 に答える