2062 / 618 / 41
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
1

Капризный указатель О_о

25.06.2013, 10:30. Показов 1925. Ответов 27
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Создаю указатель на байт, при помощник арифметических операций +/- перемещаю его в цикле. Почему при уходе в минус ~2500 и в плюс ~1500 программа завершается ошибкой?

Добавлено через 3 минуты
C++
#include <iostream>
 
int main()
{
char * b = "1234567890";
 
for ( int i = -2600 ; i < 1600 ; i ++ )
b ++ ;
 
std::cout << *b << std::endl;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.06.2013, 10:30
Ответы с готовыми решениями:

Иероглифы в выводе и капризный SET_LOCALE
Здравствуйте, форумчане! Изучаю я СиПлюПлюс по книжке дяди Шилдта. Есть тут задание на построение...

Капризный видеодрайвер!
Видюха сапфир х1950про, скачал с амд ати дрова под семерку 64 битную, вроде на вид устанавливаются...

Капризный Scanner.nextLine()
Вот я уже запарился за время знакомства с java с тем что Scanner постоянно работает как-то по...

Капризный синтаксис Shell.Run
Объясните мне, почему: А) Не отрабатывает строка CreateObject(&quot;Wscript.Shell&quot;).Run(&quot;cmd /c...

27
Неэпический
17869 / 10634 / 2054
Регистрация: 27.09.2012
Сообщений: 26,736
Записей в блоге: 1
25.06.2013, 10:33 2
Цитата Сообщение от programina Посмотреть сообщение
Почему при уходе в минус ~2500 и в плюс ~1500 программа завершается ошибкой?
Потому что лезет куда не положено


P.S. У меня ничего не падает
1
2062 / 618 / 41
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
25.06.2013, 10:38  [ТС] 3
Цитата Сообщение от Croessmah Посмотреть сообщение
Потому что лезет куда не положено


P.S. У меня ничего не падает
То есть длина строки ограничена ~4000 байтами?
0
3257 / 2059 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
25.06.2013, 10:42 4
@programina, да тут всего памяти выделено под 10(11) символов, все остальное - выход за границы.
1
2062 / 618 / 41
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
25.06.2013, 10:46  [ТС] 5
@0x10, да, но разыменуются несколько тысяч, а затем что-то происходит.
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
25.06.2013, 10:48 6
@programina, UB. Просто UB и ничего более.
1
2062 / 618 / 41
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
25.06.2013, 10:53  [ТС] 7
Цитата Сообщение от ForEveR Посмотреть сообщение
@programina, UB. Просто UB и ничего более.
мой пример кода не совсем удачный, но почему ж тогда несколько тысяч байтов не вызывают UB, если разыменовывать каждый цикл, а при превышении определенной границы UB. Такое чувство как будто здесь реализация вектора, у которого зарезервирован определенный обьем памяти.
0
Неэпический
17869 / 10634 / 2054
Регистрация: 27.09.2012
Сообщений: 26,736
Записей в блоге: 1
25.06.2013, 10:56 8
Цитата Сообщение от programina Посмотреть сообщение
но почему ж тогда несколько тысяч байтов не вызывают UB
Потому что это UB

Добавлено через 35 секунд
Цитата Сообщение от programina Посмотреть сообщение
Такое чувство как будто здесь реализация вектора, у которого зарезервирован определенный обьем памяти.
и что из этого? За пределы вектора так же можно вылезти и это тоже UB
1
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
25.06.2013, 10:56 9
@programina, Что значит не вызывают? Доступ за пределы памяти массива - UB. Точка.
А что происходит на уровне выполнения, после того как по стандарту код стал некорректным - уже совсем другие вопросы и зависит от реализации компилятора/ОС/фазы луны и пр.
1
2062 / 618 / 41
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
25.06.2013, 11:01  [ТС] 10
Цитата Сообщение от Croessmah Посмотреть сообщение
Потому что это UB

Добавлено через 35 секунд

и что из этого? За пределы вектора так же можно вылезти и это тоже UB
c++ такой с++

Добавлено через 3 минуты
@ForEveR, вечером еще раз посмотрю свой код, я точно помню, что они ВСЕГДА разыменовывались в определенном диапазоне без всяких UB.
0
Неэпический
17869 / 10634 / 2054
Регистрация: 27.09.2012
Сообщений: 26,736
Записей в блоге: 1
25.06.2013, 11:03 11
Цитата Сообщение от programina Посмотреть сообщение
что они ВСЕГДА разыменовывались в определенном диапазоне без всяких UB.
просто взаимное расположение Нептуна и Плутона не менялось
1
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
25.06.2013, 11:13 12
Цитата Сообщение от programina Посмотреть сообщение
они ВСЕГДА разыменовывались в определенном диапазоне без всяких UB
просто UB в данном случае проявляется так: "пока ушли не далеко от выделенной памяти, падения нет, но читаем мусор. Уходим чуть дальше - ОС выявляет доступ к запрещенной памяти, и завершает прогу".
1
2062 / 618 / 41
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
25.06.2013, 11:20  [ТС] 13

Не по теме:

@Croessmah, подожду стандарта c++211 :D



Добавлено через 3 минуты
@Tulosba, а не знаете по какому принципу можно просканировать всю остальную память?

Добавлено через 1 минуту
например у меня запущен текстовый редактор, я хочу отыскать в памяти название открытого в нем файла.
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
25.06.2013, 11:23 14
Цитата Сообщение от programina Посмотреть сообщение
например у меня запущен текстовый редактор, я хочу отыскать в памяти название открытого в нем файла.
Т.е. Вы хотите сканировать память другого процесса, так?
0
2062 / 618 / 41
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
25.06.2013, 11:40  [ТС] 15
Цитата Сообщение от Tulosba Посмотреть сообщение
Т.е. Вы хотите сканировать память другого процесса, так?
да, вроде этого.

Добавлено через 13 минут
Никто не знает?
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
25.06.2013, 11:43 16
Я таким не занимался. Знаю раньше была популярная программка для геймеров ArtMoney. Для сканирования памяти процесса игры и накручивания себе скилла.
1
Неэпический
17869 / 10634 / 2054
Регистрация: 27.09.2012
Сообщений: 26,736
Записей в блоге: 1
25.06.2013, 11:44 17
Цитата Сообщение от programina Посмотреть сообщение
да, вроде этого.
В винде есть для этого API
1
Croessmah
25.06.2013, 11:47
  #18

Не по теме:

Цитата Сообщение от Tulosba Посмотреть сообщение
Знаю раньше была популярная программка для геймеров ArtMoney.
Почему была? Она и сейчас есть:
Капризный указатель О_о

1
Tulosba
25.06.2013, 11:50
  #19

Не по теме:

@Croessmah, о, нет, меня похакали ... :D

0
2062 / 618 / 41
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
25.06.2013, 11:50  [ТС] 20
мне под линукс надо.
0
25.06.2013, 11:50
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.06.2013, 11:50
Помогаю со студенческими работами здесь

Капризный зверь) Если не трудно прочтите до конца
Приветствую всех сюда заглянувших! Есть зверь с такой конфигурацией: Корпус: Zalman Z9Plus...

Как получить ссылку на указатель или указатель на указатель в массиве?
В процессе реализации сортировки пузырьком натолкнулся на такую проблему: как поменять значения...

А почему нельзя передавать в ф-ю добавления элемента в стек один указатель? Почему нужен именно указатель на указатель?
Вот код ф-ии добавления элемента в стек: void push1(Node **top, int d) { // top...

Указатель типа void. Использование косвенного связывания через универсальный указатель
Необходимо использовать косвенного связывания через универсальный указатель, примерный вид: struct...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru