简体   繁体   English

具有两个邻居地址的cpp修改后的结构堆栈

[英]cpp modified struct stack having addresses of both neighbours

I'm trying to make a hybrid of a stack and a queue: 我正在尝试将堆栈和队列混合在一起:

struct NOTE {
    char vardas[20];
    char pavarde[20];
    char tel_nr[20]; // imamas ne INT, nes naudotojas gali pageidauti įvesti numerį: +<kodas-numeris> -- tarptautinis
    int gim_data[3]; // ('1990', '09', '18')
    NOTE *next=0;
    NOTE *prev=0;
};

NOTE* addNote(NOTE* last, NOTE* nNOTE) {
    NOTE *pv =new NOTE;

    pv->prev = last;
    printNOTE(last);
    *pv->gim_data = *nNOTE->gim_data;
    *pv->vardas = *nNOTE->vardas;
    *pv->pavarde = *nNOTE->pavarde;
    *pv->tel_nr = *nNOTE->tel_nr;
    last->next = nNOTE;

    cout<<"lastNOTE: " << last << endl;
    cout << "last->prev:" << last->prev<<endl;
    cout << "pv: "<<pv<<endl;
    cout<<"pv->prev: " << pv->prev  <<endl;
    cout << endl;

    return nNOTE;
}

I can assign ->next value without a problem. 我可以分配->下一个值没有问题。 The issue is with the ->prev value. 问题出在-> prev值。 It does not get proper value. 它没有获得适当的价值。 Actually it does, but once outside the function it tends to lose it: 确实可以,但是一旦超出函数,它就会丢失:

lastNOTE: 0x9497de8
last->prev:0
pv: 0x9497ef0
pv->prev: 0x9497de8

(outside the function: cout << newNote<<endl<<newNote->prev<<endl; ): (在函数外部: cout << newNote<<endl<<newNote->prev<<endl; ):

newNote: 0x9497e98
newNote->prev: 0

Why ->prev value is not being assigned? 为什么-> prev值未分配?

I commented out and rewrote 2 lines: 我注释掉并重写了两行:

    NOTE* addNote(NOTE* last, NOTE* nNOTE) {
        NOTE *pv =new NOTE;

        pv->prev = last;
        printNOTE(last);
        *pv->gim_data = *nNOTE->gim_data;
        *pv->vardas = *nNOTE->vardas;
        *pv->pavarde = *nNOTE->pavarde;
        *pv->tel_nr = *nNOTE->tel_nr;
//        last->next = nNOTE;
        last->next = pv;

        cout<<"lastNOTE: " << last << endl;
        cout << "last->prev:" << last->prev<<endl;
        cout << "pv: "<<pv<<endl;
        cout<<"pv->prev: " << pv->prev  <<endl;
        cout << endl;

//        return nNOTE;
        return pv;
    }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM