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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
programina
1914 / 599 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
#1

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

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

Создаю указатель на байт, при помощник арифметических операций +/- перемещаю его в цикле. Почему при уходе в минус ~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
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.06.2013, 10:30
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Капризный указатель О_о (C++):

Иероглифы в выводе и капризный SET_LOCALE - C++
Здравствуйте, форумчане! Изучаю я СиПлюПлюс по книжке дяди Шилдта. Есть тут задание на построение &quot;таблицы&quot;. Но при выводе ( даже с...

Как получить ссылку на указатель или указатель на указатель в массиве? - C++
В процессе реализации сортировки пузырьком натолкнулся на такую проблему: как поменять значения указателей, передаваемых в функцию. Если...

Функция, принимающая указатель и число байт и выделяющая память под указатель - C++
Здравствуйте. Задача легкая, но почему-то завис Нужно написать функцию, принимающую указатель и число байт и выделяющую память под...

Функция, получающая указатель на обычную функцию, получает указатель на метод класса - C++
Здравтсвуйте. Имеется вопрос по указателям на методы класса. Допустим, есть функция( f ), которая принимает указатель на функцию и...

Как правильно удалять выделенную память под указатель на указатель? - C++
есть код #include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;stdlib.h&gt; #include &lt;time.h&gt; using namespace std; void sort_1(const...

Реализация двоичных деревьев поиска: Зачем в параметрах функции используется указатель на указатель - C++
Всем привет, встретил в книге такой пример добавления узла в дерево: typedef struct tree { int data; tree *left, *right,...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Tulosba
:)
Эксперт С++
4395 / 3238 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
25.06.2013, 11:43 #16
Я таким не занимался. Знаю раньше была популярная программка для геймеров ArtMoney. Для сканирования памяти процесса игры и накручивания себе скилла.
1
Croessmah
Эксперт CЭксперт С++
13202 / 7473 / 839
Регистрация: 27.09.2012
Сообщений: 18,367
Записей в блоге: 3
Завершенные тесты: 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, о, нет, меня похакали ...

0
programina
1914 / 599 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
25.06.2013, 11:50  [ТС] #20
мне под линукс надо.
0
oxotnik
1590 / 1067 / 33
Регистрация: 21.08.2008
Сообщений: 4,545
Записей в блоге: 1
25.06.2013, 11:53 #21
Цитата Сообщение от programina Посмотреть сообщение
мне под линукс надо.
под вайном запусти
0
Croessmah
Эксперт CЭксперт С++
13202 / 7473 / 839
Регистрация: 27.09.2012
Сообщений: 18,367
Записей в блоге: 3
Завершенные тесты: 1
25.06.2013, 11:54 #22
Цитата Сообщение от programina Посмотреть сообщение
мне под линукс надо.
попробуйте покопать в сторону этого:
PTRACE
1
programina
1914 / 599 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
25.06.2013, 12:02  [ТС] #23
@Croessmah, спасибо, посмотрю.

Добавлено через 6 минут
Жаль только, что для этого надо запускать процессы от родителя, неплохо если бы можно было получать доступ ко всем программам.
0
TakeOver
41 / 31 / 1
Регистрация: 03.02.2013
Сообщений: 61
25.06.2013, 12:06 #24
строка заносится в секцию .data, где могут хранится другие константы, а дальше может идти сам код программы, поэтому код не крашится на определенных значениях. это UB. и не в с++ проблема.
Цитата Сообщение от programina Посмотреть сообщение

Не по теме:

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



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

Добавлено через 1 минуту
например у меня запущен текстовый редактор, я хочу отыскать в памяти название открытого в нем файла.
нормальными средствами это невозможно. что вы будете проверять на имя файла? проверять все значения в стеке и искать среди них возможные указатели? скорее код упадет с sigseg нежели вы найдете там валидный указатель. (разрабтчики boehm gc - консервативного GC для с/с++ определяют "корни" дерева для сборки мусора в стеке - при условии, что _ВСЕ_ может быть указателем).
ArtMoney работает по тому принципу, что сканирует всю память(почти как boehm gc) приложения и выделяет те участки, которые совпадают по значению, а потом отсеивают их.

//если где-то ошибся - поправьте.
1
programina
1914 / 599 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
25.06.2013, 12:23  [ТС] #25
@TakeOver, к сожалению, если верить википедии, сбор мусора тоже происходит в одной среде, то есть не получится добраться до постороннего процесса
0
oxotnik
25.06.2013, 13:06
  #26

Не по теме:

Цитата Сообщение от programina Посмотреть сообщение
Жаль только, что для этого надо запускать процессы от родителя, неплохо если бы можно было получать доступ ко всем программам.
Тогда б это была бы венда, со всеми вытекающими последствиями в виде уязвимостей.

1
programina
1914 / 599 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
26.06.2013, 08:14  [ТС] #27
что интересно, ошибка сегментации возникает при попытке разыменовать адрес, а вообще указатель можно перемещать куда угодно, можно даже в отрицательное пространство адресов залезть . Например:
C++
char *b = (char *)("1234567890");
 
for (int i = 0; i < 4500000000; i++)
    b--;
 
cout << b << endl; // минус
0
TakeOver
41 / 31 / 1
Регистрация: 03.02.2013
Сообщений: 61
26.06.2013, 08:22 #28
Цитата Сообщение от programina Посмотреть сообщение
что интересно, ошибка сегментации возникает при попытке разыменовать адрес, а вообще указатель можно перемещать куда угодно, можно даже в отрицательное пространство адресов залезть . Например:
C++
char *b = (char *)("1234567890");
 
for (int i = 0; i < 4500000000; i++)
    b--;
 
cout << b << endl; // минус
указатель - не более чем значение типа int_ptr_t . А с чего бы оно должно падать? падать оно может только от попытки доступа к несуществующей памяти, а не от того, что вы присвоили ему какое-то значение.
да хоть 123 присвойте.
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.06.2013, 08:22
Привет! Вот еще темы с ответами:

Зачем нужен указатель на указатель при работе с однонаправленным списком? - C++
День добрый. Столкнулся с непониманием этой темы. В частности, совершенно непонятен алгоритм инициализации такого вот списка. Например:...

Передача умного указателя в функцию принимающую указатель на указатель - C++
Итак имеется функция со следующим параметром: HRESULT __stdcall Function(SomeClass **param); В случае, когда создаём обычный...

Указатель на указатель, функции для создания новых массивов? - C++
Всем привет! У меня в коде есть несколько новых массивов, чтобы не повторяться я создам функцию которая будет выделять память под новые...

Приведение любого двумерного массива к типу указатель на указатель - C++
Допустим, есть несколько массивов int arr1; int arr2; int arr3; Какое преобразование нужно сделать, чтобы подобные присвоения...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
26.06.2013, 08:22
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru