Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
 
programina
 Аватар для programina
1912 / 597 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
25.06.2013, 10:30     Капризный указатель О_о #1
Создаю указатель на байт, при помощник арифметических операций +/- перемещаю его в цикле. Почему при уходе в минус ~2500 и в плюс ~1500 программа завершается ошибкой?

Добавлено через 3 минуты
C++
#include <iostream>
 
int main()
{
char * b = "1234567890";
 
for ( int i = -2600 ; i < 1600 ; i ++ )
b ++ ;
 
std::cout << *b << std::endl;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.06.2013, 10:30     Капризный указатель О_о
Посмотрите здесь:

C++ Функция принимает указатель на void и возвращает указатель на int
C++ Преобразовать указатель одного типа в указатель другого.
Приведение любого двумерного массива к типу указатель на указатель C++
Реализация двоичных деревьев поиска: Зачем в параметрах функции используется указатель на указатель C++
Функция, получающая указатель на обычную функцию, получает указатель на метод класса C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11841 / 6820 / 771
Регистрация: 27.09.2012
Сообщений: 16,911
Записей в блоге: 2
Завершенные тесты: 1
25.06.2013, 10:33     Капризный указатель О_о #2
Цитата Сообщение от programina Посмотреть сообщение
Почему при уходе в минус ~2500 и в плюс ~1500 программа завершается ошибкой?
Потому что лезет куда не положено


P.S. У меня ничего не падает
programina
 Аватар для programina
1912 / 597 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
25.06.2013, 10:38  [ТС]     Капризный указатель О_о #3
Цитата Сообщение от Croessmah Посмотреть сообщение
Потому что лезет куда не положено


P.S. У меня ничего не падает
То есть длина строки ограничена ~4000 байтами?
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
25.06.2013, 10:42     Капризный указатель О_о #4
@programina, да тут всего памяти выделено под 10(11) символов, все остальное - выход за границы.
programina
 Аватар для programina
1912 / 597 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
25.06.2013, 10:46  [ТС]     Капризный указатель О_о #5
@0x10, да, но разыменуются несколько тысяч, а затем что-то происходит.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
25.06.2013, 10:48     Капризный указатель О_о #6
@programina, UB. Просто UB и ничего более.
programina
 Аватар для programina
1912 / 597 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
25.06.2013, 10:53  [ТС]     Капризный указатель О_о #7
Цитата Сообщение от ForEveR Посмотреть сообщение
@programina, UB. Просто UB и ничего более.
мой пример кода не совсем удачный, но почему ж тогда несколько тысяч байтов не вызывают UB, если разыменовывать каждый цикл, а при превышении определенной границы UB. Такое чувство как будто здесь реализация вектора, у которого зарезервирован определенный обьем памяти.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11841 / 6820 / 771
Регистрация: 27.09.2012
Сообщений: 16,911
Записей в блоге: 2
Завершенные тесты: 1
25.06.2013, 10:56     Капризный указатель О_о #8
Цитата Сообщение от programina Посмотреть сообщение
но почему ж тогда несколько тысяч байтов не вызывают UB
Потому что это UB

Добавлено через 35 секунд
Цитата Сообщение от programina Посмотреть сообщение
Такое чувство как будто здесь реализация вектора, у которого зарезервирован определенный обьем памяти.
и что из этого? За пределы вектора так же можно вылезти и это тоже UB
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
25.06.2013, 10:56     Капризный указатель О_о #9
@programina, Что значит не вызывают? Доступ за пределы памяти массива - UB. Точка.
А что происходит на уровне выполнения, после того как по стандарту код стал некорректным - уже совсем другие вопросы и зависит от реализации компилятора/ОС/фазы луны и пр.
programina
 Аватар для programina
1912 / 597 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
25.06.2013, 11:01  [ТС]     Капризный указатель О_о #10
Цитата Сообщение от Croessmah Посмотреть сообщение
Потому что это UB

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

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

Добавлено через 3 минуты
@ForEveR, вечером еще раз посмотрю свой код, я точно помню, что они ВСЕГДА разыменовывались в определенном диапазоне без всяких UB.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11841 / 6820 / 771
Регистрация: 27.09.2012
Сообщений: 16,911
Записей в блоге: 2
Завершенные тесты: 1
25.06.2013, 11:03     Капризный указатель О_о #11
Цитата Сообщение от programina Посмотреть сообщение
что они ВСЕГДА разыменовывались в определенном диапазоне без всяких UB.
просто взаимное расположение Нептуна и Плутона не менялось
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
25.06.2013, 11:13     Капризный указатель О_о #12
Цитата Сообщение от programina Посмотреть сообщение
они ВСЕГДА разыменовывались в определенном диапазоне без всяких UB
просто UB в данном случае проявляется так: "пока ушли не далеко от выделенной памяти, падения нет, но читаем мусор. Уходим чуть дальше - ОС выявляет доступ к запрещенной памяти, и завершает прогу".
programina
 Аватар для programina
1912 / 597 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
25.06.2013, 11:20  [ТС]     Капризный указатель О_о #13

Не по теме:

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



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

Добавлено через 1 минуту
например у меня запущен текстовый редактор, я хочу отыскать в памяти название открытого в нем файла.
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
25.06.2013, 11:23     Капризный указатель О_о #14
Цитата Сообщение от programina Посмотреть сообщение
например у меня запущен текстовый редактор, я хочу отыскать в памяти название открытого в нем файла.
Т.е. Вы хотите сканировать память другого процесса, так?
programina
 Аватар для programina
1912 / 597 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
25.06.2013, 11:40  [ТС]     Капризный указатель О_о #15
Цитата Сообщение от Tulosba Посмотреть сообщение
Т.е. Вы хотите сканировать память другого процесса, так?
да, вроде этого.

Добавлено через 13 минут
Никто не знает?
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
25.06.2013, 11:43     Капризный указатель О_о #16
Я таким не занимался. Знаю раньше была популярная программка для геймеров ArtMoney. Для сканирования памяти процесса игры и накручивания себе скилла.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11841 / 6820 / 771
Регистрация: 27.09.2012
Сообщений: 16,911
Записей в блоге: 2
Завершенные тесты: 1
25.06.2013, 11:44     Капризный указатель О_о #17
Цитата Сообщение от programina Посмотреть сообщение
да, вроде этого.
В винде есть для этого API
Croessmah
25.06.2013, 11:47
  #18

Не по теме:

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

Tulosba
25.06.2013, 11:50
  #19

Не по теме:

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

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.06.2013, 11:50     Капризный указатель О_о
Еще ссылки по теме:

Расскажите, как здесь работает указатель на указатель? C++
Почему указатель на указатель объявляется как float **A; C++
C++ Как правильно удалять выделенную память под указатель на указатель?

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

Или воспользуйтесь поиском по форуму:
programina
 Аватар для programina
1912 / 597 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
25.06.2013, 11:50  [ТС]     Капризный указатель О_о #20
мне под линукс надо.
Yandex
Объявления
25.06.2013, 11:50     Капризный указатель О_о
Ответ Создать тему
Опции темы

Текущее время: 00:50. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru