#include <iostream>
using namespace std;
int main() {
int **r = new int *; // declare pointer to int*
cout << r << endl; // outputs some address in memory (pointer to int*)
cout << *r << endl; // outputs some garbage value
// cout << **r << endl; // it's invalid
*r = new int; // assign to memory pointed by r new value
cout << *r << endl; // outputs some address in memory (pointer to int)
cout << **r << endl; // outputs some garbage value
delete *r; // delete pointer to int
cout << *r << endl; // outputs same address in memory, but we can't dereference it
// cout << **r << endl; // it's invalid, because we deleted *r
// here you can acces r, *r, but not
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKaW50IG1haW4oKSB7CiAgICBpbnQgKipyID0gbmV3IGludCAqOyAvLyBkZWNsYXJlIHBvaW50ZXIgdG8gaW50KgogICAgY291dCA8PCByIDw8IGVuZGw7ICAgLy8gb3V0cHV0cyBzb21lIGFkZHJlc3MgaW4gbWVtb3J5IChwb2ludGVyIHRvIGludCopCiAgICBjb3V0IDw8ICpyIDw8IGVuZGw7ICAvLyBvdXRwdXRzIHNvbWUgZ2FyYmFnZSB2YWx1ZQovLyAgY291dCA8PCAqKnIgPDwgZW5kbDsgLy8gaXQncyBpbnZhbGlkCiAgICAKICAgICpyID0gbmV3IGludDsgICAgICAgIC8vIGFzc2lnbiB0byBtZW1vcnkgcG9pbnRlZCBieSByIG5ldyB2YWx1ZQogICAgY291dCA8PCAqciA8PCBlbmRsOyAgLy8gb3V0cHV0cyBzb21lIGFkZHJlc3MgaW4gbWVtb3J5IChwb2ludGVyIHRvIGludCkKICAgIGNvdXQgPDwgKipyIDw8IGVuZGw7IC8vIG91dHB1dHMgc29tZSBnYXJiYWdlIHZhbHVlCiAgICAKICAgIGRlbGV0ZSAqcjsgICAgICAgICAgIC8vIGRlbGV0ZSBwb2ludGVyIHRvIGludAogICAgY291dCA8PCAqciA8PCBlbmRsOyAgLy8gb3V0cHV0cyBzYW1lIGFkZHJlc3MgaW4gbWVtb3J5LCBidXQgd2UgY2FuJ3QgZGVyZWZlcmVuY2UgaXQKLy8gIGNvdXQgPDwgKipyIDw8IGVuZGw7IC8vIGl0J3MgaW52YWxpZCwgYmVjYXVzZSB3ZSBkZWxldGVkICpyCiAgICAKICAgIC8vIGhlcmUgeW91IGNhbiBhY2NlcyByLCAqciwgYnV0IG5vdCAKICAgIHJldHVybiAwOwp9