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

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

Войти
Регистрация
Восстановить пароль
 
IvanPryamoy_2
0 / 0 / 0
Регистрация: 21.01.2013
Сообщений: 23
#1

Что это значит: *(void**)ReturnValue) = hHeap; ? - C++

21.01.2013, 17:00. Просмотров 404. Ответов 4
Метки нет (Все метки)

Вот честно, не могу понять что значит вторая строчка кода:

C++
1
2
void* ReturnValue = (void*) HeapAlloc((HANDLE) hHeap, HEAP_GENERATE_EXCEPTIONS | HEAP_NO_SERIALIZE | HEAP_ZERO_MEMORY, count + sizeof(void*) );
*((void**)ReturnValue) = hHeap;
Если написать:
C++
1
*ReturnValue = hHeap;
, то появляется ошибка: "error C2100: недопустимое косвенное обращение". Так чем вышепревиденное извращение с преобразованием к двойному указателю, а потом обращение по нему лучше?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.01.2013, 17:00     Что это значит: *(void**)ReturnValue) = hHeap; ?
Посмотрите здесь:

C++ что это значит?
что значит !a и a%=(c+10) и как это записать? C++
C++ Что значит это условие
a=*b Что это значит? C++
Что значит это строка кода? C++
Что это значит? C++
C++ что это значит?
Что значит void в прототипе? C++
C++ Что значит (void*)2)?
Что значит слово void C++
C++ Что это значит if (x&1) ?
Не могу понять, что это значит: while(i<10/2) C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Pure
228 / 49 / 2
Регистрация: 13.03.2012
Сообщений: 453
Записей в блоге: 7
21.01.2013, 17:09     Что это значит: *(void**)ReturnValue) = hHeap; ? #2
Изначально ReturnValue - просто указатель

*((void**)ReturnValue) = hHeap; - здесь он преобразован к указателю на указатель, далее разыменован и представляет из себя указатель.
То бишь ReturnValue.

Если обратится как ты пишешь *ReturnValue = hHeap, то будет ошибка доступа - ты разыменовываешь указатель на void и пытаешься "этому нечто" что то присвоить.


*((void**)ReturnValue) = hHeap; - эта запись и правда лишена смысла. она равна следующей

ReturnValue = hHeap;
IvanPryamoy_2
0 / 0 / 0
Регистрация: 21.01.2013
Сообщений: 23
21.01.2013, 17:36  [ТС]     Что это значит: *(void**)ReturnValue) = hHeap; ? #3
Цитата Сообщение от Pure Посмотреть сообщение
*((void**)ReturnValue) = hHeap; - эта запись и правда лишена смысла. она равна следующей

ReturnValue = hHeap;
Нет, эти записи не равнозначны. В первом случае значение ReturnValue (адрес) не меняется, а во втором становится равным hHeap (проверено отладчиком). Другими словами в первом случае происходит присвоение значения по адресу ReturnValue, а во втором- присвоение указателя (теперь два указателя ссылаются на одно место в памяти).

Мне как раз и надо по адресу ReturnValue положить значение hHeap (чтобы в операторе delete его извлечь).
Pure
228 / 49 / 2
Регистрация: 13.03.2012
Сообщений: 453
Записей в блоге: 7
21.01.2013, 17:41     Что это значит: *(void**)ReturnValue) = hHeap; ? #4
IvanPryamoy_2, ReturnValue это указатель на void, то бишь void*. Типа void как такового не быть.
Незя его разыменовать. Далее hHeap это скорее всего тип HANDLE. котрый в итоге является тем же void*

http://vsokovikov.narod.ru/New_MSDN_...te_windows.htm

поэтому

ReturnValue = hHeap;

это гуд

Если надо положить по указателю какое то значение то приведи его к DWORD хотя бы.
IvanPryamoy_2
0 / 0 / 0
Регистрация: 21.01.2013
Сообщений: 23
21.01.2013, 18:02  [ТС]     Что это значит: *(void**)ReturnValue) = hHeap; ? #5
Цитата Сообщение от Pure Посмотреть сообщение
IvanPryamoy_2, ReturnValue это указатель на void, то бишь void*. Типа void как такового не быть.
Незя его разыменовать. Далее hHeap это скорее всего тип HANDLE. котрый в итоге является тем же void*

http://vsokovikov.narod.ru/New_MSDN_...te_windows.htm

поэтому

ReturnValue = hHeap;

это гуд

Если надо положить по указателю какое то значение то приведи его к DWORD хотя бы.
Так в моем примере как раз кладется значение по указателю (значением является тоже указатель). Но что эта фраза значит мне непонятно.
Yandex
Объявления
21.01.2013, 18:02     Что это значит: *(void**)ReturnValue) = hHeap; ?
Ответ Создать тему
Опции темы

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