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

Какой то бред с передачей указателя в функцию :-) - C++

Восстановить пароль Регистрация
 
newbie666
Заблокирован
02.04.2014, 12:07     Какой то бред с передачей указателя в функцию :-) #1
Привет! Толи бред какой - то Толи у меня пробел в азах

Вот например:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void MegaFunction( BYTE *data );
 
int _tmain(int argc, _TCHAR* argv[])
{
      BYTE *test = NULL;
      MegaFunction(test);
      //ТУТ test всё равно == NULL (x86 - 0x00000000) ...
      return 0;
}
 
void MegaFunction( BYTE *data )
{
    data = new BYTE[2];
    data[0] = 0x01;
    data[0] = 0x02;
}
После вызова мегафункции в мейне, в которую по идее передаю указатель на test, этот test всё равно остаётся нулевым, хотя в мегафункции вроде аллоцируется память и даже какие - то значения присваиваются ... Три тысячи чертей, но почему? Или для таких базовых вещей надо указатель на указатель юзать?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11817 / 6796 / 769
Регистрация: 27.09.2012
Сообщений: 16,867
Записей в блоге: 2
Завершенные тесты: 1
02.04.2014, 12:12     Какой то бред с передачей указателя в функцию :-) #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Так в функции то копия указателя
Vourhey
Почетный модератор
6468 / 2243 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
02.04.2014, 12:13     Какой то бред с передачей указателя в функцию :-) #3
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от newbie666 Посмотреть сообщение
//ТУТ test всё равно == NULL (x86 - 0x00000000) ...
Потому что значение указателя копируется в функцию. Ты работаешь с временной переменной. Используй **.

Добавлено через 25 секунд
Цитата Сообщение от newbie666 Посмотреть сообщение
Или для таких базовых вещей надо указатель на указатель юзать?
Точно.
palva
 Аватар для palva
2372 / 1594 / 190
Регистрация: 08.06.2007
Сообщений: 6,362
Записей в блоге: 4
02.04.2014, 12:15     Какой то бред с передачей указателя в функцию :-) #4
C++
1
2
3
BYTE b;
BYTE *test = &b;
MegaFunction(test);
Добавлено через 1 минуту
C++
1
2
BYTE test;
MegaFunction(&test);
newbie666
Заблокирован
02.04.2014, 12:22  [ТС]     Какой то бред с передачей указателя в функцию :-) #5
Цитата Сообщение от Croessmah Посмотреть сообщение
Так в функции то копия указателя
не ну я так и подумал, просто мне почему - то казалось, что указатель как бы не переменная, а ниточка связи с внешним миром ухаха
don_keyhot
 Аватар для don_keyhot
4 / 4 / 2
Регистрация: 02.04.2014
Сообщений: 60
03.04.2014, 11:41     Какой то бред с передачей указателя в функцию :-) #6
ну если всем понятно, то дайте кто-нить, плиз, полный код
а то у меня ну никак не получается, мозги уже кипят (
aLarman
636 / 557 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
03.04.2014, 11:44     Какой то бред с передачей указателя в функцию :-) #7
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
BYTE * MegaFunction();
 
int _tmain(int argc, _TCHAR* argv[])
{
      BYTE *test = NULL;
      test = MegaFunction();
      delete [] test;
      return 0;
}
 
BYTE * MegaFunction(  )
{
    data = new BYTE[2];
    data[0] = 0x01;
    data[1] = 0x02;
return data;
}
don_keyhot
 Аватар для don_keyhot
4 / 4 / 2
Регистрация: 02.04.2014
Сообщений: 60
03.04.2014, 11:53     Какой то бред с передачей указателя в функцию :-) #8
aLarman, не, это через возврат ссылки, это не то чего я ждал
ведь автор вроде как (догадываясь по тексту) сделал без возврата сылки а с помощью **. вот мне его решение и интересно, как?..
aLarman
636 / 557 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
03.04.2014, 12:01     Какой то бред с передачей указателя в функцию :-) #9
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void MegaFunction(BYTE ** data);
 
int _tmain(int argc, _TCHAR* argv[])
{
      BYTE *test = NULL;
      MegaFunction(&test);
      delete [] test;
      return 0;
}
 
void MegaFunction(BYTE ** data)
{
    *data = new BYTE[2];
    *data[0] = 0x01;
    *data[1] = 0x02;
}
Добавлено через 5 минут
поправка
C++
1
2
3
4
5
6
void MegaFunction(BYTE ** data)
{
    *data = new BYTE[2];
    (*data)[0] = 0x01;
    (*data)[1] = 0x02;
}
don_keyhot
 Аватар для don_keyhot
4 / 4 / 2
Регистрация: 02.04.2014
Сообщений: 60
03.04.2014, 12:22     Какой то бред с передачей указателя в функцию :-) #10
aLarman, спасибо, да, вот это то что надо. класс!
aLarman
03.04.2014, 13:10
  #11

Не по теме:

don_keyhot, еще вариант

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void MegaFunction(unsigned char *& data);
 
int main()
{
   
    unsigned char *test = NULL;
    MegaFunction(test);
    cout<<(int)test<<endl;
    cout<<(int)test[0]<<endl;
    cout<<(int)test[1]<<endl;
    delete [] test;
   system("pause");
   return 0;
}
 
void MegaFunction(unsigned char *& data)
{
    data = new unsigned char[2];
    data[0] = 0x01;
    data[1] = 0x02;
}

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.04.2014, 14:17     Какой то бред с передачей указателя в функцию :-)
Еще ссылки по теме:

C++ Передача указателя в функцию
C++ Программа считает бред какой-то
C++ Использование указателя на функцию

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

Или воспользуйтесь поиском по форуму:
don_keyhot
 Аватар для don_keyhot
4 / 4 / 2
Регистрация: 02.04.2014
Сообщений: 60
03.04.2014, 14:17     Какой то бред с передачей указателя в функцию :-) #12
aLarman, круто! спасибо
Yandex
Объявления
03.04.2014, 14:17     Какой то бред с передачей указателя в функцию :-)
Ответ Создать тему
Опции темы

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