169 похожих чатов

Привет всем. Код программы: int x = 10; int *px = &x; printf("Изначальный

адрес=%p \nИзначальное значение=%d \n", (void*)px, *px);
px++;
printf(" \npx++ \nАдрес=%p \nЗначение=%d \n", (void*)px, *px);
px--;
printf(" \npx-- \nАдрес=%p \nЗначение=%d \n", (void*)px, *px);
Вывод программы :
`Изначальный адрес=0x7ffc5ccde80c
Изначальное значение=10
px++
Адрес=0x7ffc5ccde810
Значение=1556998160
px--
Адрес=0x7ffc5ccde80c
Значение=10`
Откуда взялось значение: 1556998160 по новому адресу? Осталось там от другой программы, использующей эту память до Си?

6 ответов

25 просмотров

Могло и от твоей остаться, а может это что-то в строковом представлении, а может и нет, а может... это ub

Правильный ответ на этот вопрос — вас это не должно волновать, так делать нельзя это UB. Конкретно в данном случае 1556998160 это 0x5ccde810 — младшие 32 бита адреса переменной x. Т.е. мы попали в адрес переменной px и попробовали её разыменовать как int. В общем случае, обычные современные OS "не оставляют данные от предыдущих запусков". В неинициализированной памяти в общем случае будет мусор.

Spiker01- Автор вопроса
Eugene Nikulin
Правильный ответ на этот вопрос — вас это не должн...

Какие биты переменной x если адресная арифметика

Spiker01- Автор вопроса
Malformed C
Какие биты переменной x если адресная арифметика

Значит смещение на следующий стек памяти произошло корректно и эти данные никак физически не связаны с x?

Spiker01- Автор вопроса
Malformed C
Какие биты переменной x если адресная арифметика

Значит это просто мусор, не принадлежащий другой программе? Мы не можем попасть на память другой программы?

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта