21

Re: допоможіть початківцю

hesting написав:

поясніть детальніше, чому "rvalue" це по вашому lvalue ?

Тому що так каже стандарт, ось чому. Гляньте повідомлення №13:)

22

Re: допоможіть початківцю

ага, значить якщо в обєкта можна взяти адрес, то він також вважається lvalue.
Але в даному випадку це не змінює тривалості життя цього обєкта

23

Re: допоможіть початківцю

hesting написав:

Я уже все пояснив.

Не пояснили. Тож по черзі, ще раз: шо "одразу видаляється з пам'яті" в цьому рядку, після повернення цієї функції?

address[0].setAddress(4300, "Ukraine", "Kiev", "Kirovskaya", 99);
ваш перл написав:

В точці {0} ви створили тимчасові змінні, які передаються у функцію setAddress як rvalue.
Проблема rvalue в тому, що як тільки ви вийшли з функції setAddress (точка {1}), вони одразу ж видаляються з памяті!
Тому на момент виклику функції printAddress {2}, ваші вказівники вказуть на мусор!

"Проблема", пане аналитику, тут насправді в тому, шо перш ніж вдягатися в експерта і менторським тоном повчати інших, треба спочатку принаймні переконатися, шо твердження ваші не суперечитимуть дійсності.
Ви не удосижились перевірити той код, перед тим як ганьбитися грати експерта, егеж? Але розумієте, халепа, той код працює і виводить рядки, які не мали виводитися, адже там за вашою "експертною" думкою - "мусор". Якби ви перевірили це, то уникнули б цієї ситуації і вам би не прийшлось вислизати як в'юну з цими вашими "спрощеними" прикладами. Для кого вони спрощені, для вас? :D Але я вас питав про іншу ситуацію, дивіться вище, я продублював питання.
Більше того, замість "ржати", коли вам вказали на вашу помилку (м'яко кажучи), ви б могли як справжній експерт піти і самокритично перевірити, і переконатися, шо ті рядки лежать в секції .rdata, RO секції. Але ви вибрали ржати...

Сподіваюсь на 2 відповіді, спочатку без компіляції, а потім після компіляції

От. Вам варто самому спочатку так робити - перевіряти власні твердження конпіліруванієм, шоб не ганьбитися. бо я розумію, може ви й справді вважаєте себе big guy в програмуванні, але й з искпердами такого рівня бувають оплошності, особливо якшо вони заносяться трохи . ;)

Подякували: koala, 0xDADA11C72

24

Re: допоможіть початківцю

ntkrnlpa.exe написав:

"Проблема", пане аналитику, тут насправді в тому, шо перш ніж вдягатися в експерта і менторським тоном повчати інших, треба спочатку принаймні переконатися, шо твердження ваші не суперечитимуть дійсності.
Ви не удосижились перевірити той код, перед тим як ганьбитися грати експерта, егеж? Але розумієте, халепа, той код працює і виводить рядки, які не мали виводитися, адже там за вашою "експертною" думкою - "мусор".

Я перепрошую, але мені здається що ви трошки помиляєтесь. Там дійсно буде UB. Undefined behavior не має проблем з компіляцією - іншв річ що це не гарантується завжди.
Там дійсно створюється вказівник на тимчасову пам'ять. Зробіть декілька потоків, або запишіть інші дані за цією адресою. Ви самі все побачите. А використання цієї пам'яті у класі - це стандартне UB

25

Re: допоможіть початківцю

ntkrnlpa.exe написав:

Більше того, замість "ржати", коли вам вказали на вашу помилку (м'яко кажучи), ви б могли як справжній експерт піти і самокритично перевірити, і переконатися, шо ті рядки лежать в секції .rdata, RO секції. Але ви вибрали ржати...

на хамовите звернення отримали відповідну відповідь

а по суті питання - я розібрався з .data і визнаю вашу правоту

Подякували: Yola, koala, 0x9111A, varkon4