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

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

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

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

25.06.2013, 10:30. Просмотров 949. Ответов 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;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
oxotnik
 Аватар для oxotnik
1586 / 1063 / 33
Регистрация: 21.08.2008
Сообщений: 4,545
Записей в блоге: 1
25.06.2013, 11:53     Капризный указатель О_о #21
Цитата Сообщение от programina Посмотреть сообщение
мне под линукс надо.
под вайном запусти
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт CЭксперт С++
 Аватар для Croessmah
12516 / 7078 / 796
Регистрация: 27.09.2012
Сообщений: 17,481
Записей в блоге: 2
Завершенные тесты: 1
25.06.2013, 11:54     Капризный указатель О_о #22
Цитата Сообщение от programina Посмотреть сообщение
мне под линукс надо.
попробуйте покопать в сторону этого:
PTRACE
programina
 Аватар для programina
1912 / 597 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
25.06.2013, 12:02  [ТС]     Капризный указатель О_о #23
@Croessmah, спасибо, посмотрю.

Добавлено через 6 минут
Жаль только, что для этого надо запускать процессы от родителя, неплохо если бы можно было получать доступ ко всем программам.
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) приложения и выделяет те участки, которые совпадают по значению, а потом отсеивают их.

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

Не по теме:

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

programina
 Аватар для programina
1912 / 597 / 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; // минус
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.06.2013, 08:22     Капризный указатель О_о
Еще ссылки по теме:

Результат функции зависит от ёё расположения в коде О_о C++
Зачем использовать Указатель на указатель? C++
Thread ссылка на удаленную функцию о_О C++
C++ Иероглифы в выводе и капризный SET_LOCALE
Указатель на указатель заполнение матрицы C++

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

Или воспользуйтесь поиском по форуму:
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 присвойте.
Yandex
Объявления
26.06.2013, 08:22     Капризный указатель О_о
Ответ Создать тему
Опции темы

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