Форум программистов, компьютерный форум 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++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
oxotnik
 Аватар для oxotnik
1584 / 1061 / 33
Регистрация: 21.08.2008
Сообщений: 4,545
Записей в блоге: 1
25.06.2013, 11:53     Капризный указатель О_о #21
Цитата Сообщение от programina Посмотреть сообщение
мне под линукс надо.
под вайном запусти
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,919
Записей в блоге: 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++
Почему указатель на указатель объявляется как float **A; C++
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     Капризный указатель О_о
Ответ Создать тему
Опции темы

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