Question

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. 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;):

newNote: 0x9497e98
newNote->prev: 0

Why ->prev value is not being assigned?

Was it helpful?

Solution

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;
    }
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top