![]() |
Модераторы: bsa |
![]() ![]() ![]() |
|
eXa |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 133 Регистрация: 1.12.2006 Репутация: нет Всего: нет |
Пробуя себя в C++ и никак недоходят до меня использование ссылок и в чём их разница(* ** &)
такой код несъедобен для компиллятора, почему?
И вот ещё мой моск никак не понимает что за [0],[1],[6],[0x0D] после request этож массивO_o, тоесть ставя ** переменная = массив(глупость канеш) |
||||
|
|||||
JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 6 Всего: 162 |
один символ. что ты этим хотел сказать? |
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
int *p - это указатель на переменную типа int. Пока ты не присвоишь значение, указатель считается "диким" - т.е. указывает непонятно куда.
int i; это переменная типа int. К ней нельзя применять операторы [] и "унарная звездочка", так как это не указатель p = &i - теперь указателю p присваивается адрес переменной i Чтобы присвоить переменной, на которую указывает p, значение, нужно "разыменовать указатель": *p = 10 p = (int*)malloc(sizeof(*p)*10) - а тут указателю p присваивается адрес динамического массива из 10 переменных типа int. Теперь доступ к ним можно получить так: p[0], p[1] - доступ к первой и второй переменный соответственно. Можно и так, что тоже самое: *(p+0), *(p+1) int v[10] - это статический массив из 10 элементов. По сути своей v аналогичен p в предыдущем примере, только с самого начала указывает на массив. Можно даже выполнить такую операцию: p = v; после чего можно будет работать с массивом через p int **pp - это указатель на переменную типа int* (int* - это указатель на тип int). Вот тут во второй половине первого поста (про двумерные динамические массивы) есть пример использования. |
|||
|
||||
eXa |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 133 Регистрация: 1.12.2006 Репутация: нет Всего: нет |
JackYF хотел сказать
bsa +1 Доходчиво НОооо...
При компиляции выскакивает еррор и тыкает на инструкцию 0x000000X которая неможет прочитать 0x000000X. Поправьте меня ![]() Это сообщение отредактировал(а) eXa - 6.1.2008, 01:13 |
||||
|
|||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
eXa, ты читал ссылку, которую я тебе дал?
А еще ты не понял про "дикие указатели". И это ошибка не при компиляции, а при исполнении - ты пытаешься прочитать значение по неизвестно какому адресу - срабатывает защита операционной системы. |
|||
|
||||
onsql |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 94 Регистрация: 3.12.2007 Репутация: 1 Всего: 3 |
Пытаешься писать неизвестно куда в память, вот у тебя access violation и вылезает...
|
|||
|
||||
onsql |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 94 Регистрация: 3.12.2007 Репутация: 1 Всего: 3 |
eXa
А чтобы заставить твой код заработать, надо его исправить както так :
Другой вопрос, что приведенный пример настолько же бесполезен, насколько и безумен ![]() Это сообщение отредактировал(а) onsql - 6.1.2008, 01:46 |
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
eXa, если содержимое массива меняться не будет, то попробуй переписать так:
|
|||
|
||||
eXa |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 133 Регистрация: 1.12.2006 Репутация: нет Всего: нет |
Спасибо за быстрые ответы
![]() ![]() Это сообщение отредактировал(а) eXa - 6.1.2008, 04:55 |
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
||||
|
||||
onsql |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 94 Регистрация: 3.12.2007 Репутация: 1 Всего: 3 |
eXa
Довольно странно всё это. Я сейчас собрал это дело под cygwin, запустил под gdb - никаких ошибок нет. Попросил товарища собрать в VS2008 - тоже результат, за исключением того что хидер winsock2.h он убрал (непонятно, зачем он вообще в этом примере), а stdlib.h и string.h добавил. Кстати что за сообщение, unhandled exception, ещё что-то? Ты бы написал под чем собираешь и текст ошибки, которую получаешь? Вполне возможно, что сообщение которое ты получаешь возникает в каком либо модуле, который линкуется к твоему экзешнику. Попробуй запустить этот код под отладчиком и посмотреть в каком месте происходит ошибка. |
|||
|
||||
eXa |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 133 Регистрация: 1.12.2006 Репутация: нет Всего: нет |
bsa это отрывок участка кода от авторизации icq, в нём то я и хочу разобраться. Насколько я понимаю, надо собрать строку для последуюшей отправки. Про массивы обязательно почитаю.
Авторизация ICQ из исходника ZBrute
onsql пересобрал ещё разок, в моём примере примере при отладке пишет про нарушениие сегметации при вызове
Это сообщение отредактировал(а) eXa - 6.1.2008, 15:30 |
||||
|
|||||
onsql |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 94 Регистрация: 3.12.2007 Репутация: 1 Всего: 3 |
А ну тогда понятно, ты просто про другой код писал
![]() А в этой функции:
двойной указатель char ** request нужен для того что бы возвращать значение указателя из функции. Если просто написать char * request то можно будет изменять значения по адресу request, но сам request поменять будет нельзя, т.е:
|
||||
|
|||||
eXa |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 133 Регистрация: 1.12.2006 Репутация: нет Всего: нет |
Понемногу вникаюсь! Сотни жаль нету, плюсанул бы вас
onsql вот только поясни эту хитрую строчку,
И вот вопросек ещё один назрел, далёкий от сабжа но всёже ![]() После отправки этих строк, я получаю ответ из нечитаемых символов, как мне их перевести в читабельный вид? |
|||
|
||||
bsa |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
функция printf - это форматированный вывод. соответсвенно, есть спецификаторы форматирования - они начинаются со знака % (процент) и определяют количество и тип параметров. в твоем случае: %08X - выводит восьмизначное шестнадцатиричное число (32 бита) (например: 000123AB) %s - текст В твоем случае в этой строке есть ошибка. надо вместо %08X использовать %08p. Так как x - это не 32-х битное целое, а указатель. А он далеко не всегда 32-х битный.
только в цикле должен перебрать весь набор (массив) и распечать числа. |
||||||
|
|||||||
![]() ![]() ![]() |
Правила форума "C/C++: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |