Re[5]: указатели
От: Xentrax Россия http://www.lanovets.ru
Дата: 28.08.04 07:19
Оценка:
Здравствуйте, Burd, Вы писали:

B>Я кажись понял. А кто под двойной указатель память выделяет?


B>value = (BYTE**) malloc (1 * sizeof(BYTE**));


Бррр

Смотрите, в функцию параметр приходит не по ссылке (&), он передается по значению. Это означает, что у вас будет утечка памяти при выходе из функции. Чтобы работал ваш вариант, функция должна была бы быть обявлена хотя как Func(BYTE**& value)

Передача в параметре указателя на указатель означает, что в функцию приходит не 0 (NULL), а адрес на какую-то переменную длиной sizeof(BYTE*), т.е. адрес переменной типа указатель на BYTE.

Т.е. в начале функции надо обязательно проверить, что пришел не 0, хотя бы в отладочной версии:

assert(value != 0);



В языке С++ это можно было бы записать как BYTE*& rValue.


void Func(/* out */ BYTE*& value)
{
...
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.