Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Простой вопрос по выделению памяти


Автор: Ak47black 13.6.2007, 13:50
Здравствуйте.
Вообщем у меня просто вопрос надеюсь вы быстро на него ответите.
У меня невыходит выделить, скопировать и освободить память.
Вот что пытаюсь сделать
Код

        PVOID bits;
    bits = malloc(pso->cjBits); // ULONG  pso->cjBits
    memcpy(bits,pso->pvBits,pso->cjBits); // PVOID pso->pvBits
    free(bits);

Не правильный конечно у меня вышел код покопался в MSDN и нашел  вот такой код
Код

void free( 
   void *memblock 
);

А где а параметрах размер?
Вообщем вот так-бы выглядело на Delphi
Код

var
  bits: PVOID;
begin
  Getmem(bits, pso.cjBits);
  Copymem(bits,pso.pvBits,pso.cjBits);
  Freemem(bits, pso.cjBits));
 
И еше можете ктонибудь своими словами сказать что представляет PVOID тип, это если на Delphi Poiter ?  smile 

Автор: Damarus 13.6.2007, 14:06
Цитата(Ak47black @  13.6.2007,  13:50 Найти цитируемый пост)
И еше можете ктонибудь своими словами сказать что представляет PVOID тип

Код
void*


Цитата(Ak47black @  13.6.2007,  13:50 Найти цитируемый пост)
А где а параметрах размер?

А зачем размер? Освободиться столько, сколько ты выделил.

Автор: DigitSphinx 13.6.2007, 14:12
The free function deallocates a memory block (memblock) that was previously allocated by a call to calloc, malloc, or realloc. The number of freed bytes is equivalent to the number of bytes requested when the block was allocated (or reallocated, in the case of realloc)

Автор: Ak47black 13.6.2007, 14:56
Ну для меня просто странно так как в Delphi то надо писать скока например
Код

  Freemem(bits, pso.cjBits);

Значит число это гдето храниться тогда в памяти скока освободил.
Я пишу драйвер ,а вообще в драйверах можно пользоваться этим?
Код у меня такой вот 
Код

    PVOID bits;
    bits = malloc(pso->cjBits);
    memcpy(bits,pso->pvBits,pso->cjBits);
    free(bits);

и ошибки
Цитата

enable.obj : error LNK2019: unresolved external symbol _free referenced in funct
ion _DrvEscape@24
enable.obj : error LNK2019: unresolved external symbol _malloc referenced in fun
ction _DrvEscape@24
objchk_wnet_x86\i386\mirror.dll : error LNK1120: 2 unresolved externals

Автор: archimed7592 13.6.2007, 14:59
Цитата(Ak47black @  13.6.2007,  13:50 Найти цитируемый пост)
Вообщем вот так-бы выглядело на Delphi

ЕМНИП, ещё с Delphi 1.0(если не с Turbo Pascal 7.1) второй параметр, указывающий размер можно было опускать как не нужный(и если указать его неправильно, то ничего не изменится).

Автор: Ak47black 13.6.2007, 15:01
archimed7592, ок я раньше думал что обязательно нуна указывать  smile .
Ну может кто видит в чём тут проблема с кодом?

Автор: JackYF 13.6.2007, 15:17
Среда разработки какая?

Автор: Ak47black 13.6.2007, 15:23
DDK и компилю через Build

Автор: MAKCim 13.6.2007, 18:20
Ak47black
дык ежели драйвер пишешь, конечно будут ошибки
Цитата(Ak47black @  13.6.2007,  14:56 Найти цитируемый пост)
enable.obj : error LNK2019: unresolved external symbol _free referenced in funct
ion _DrvEscape@24
enable.obj : error LNK2019: unresolved external symbol _malloc referenced in fun
ction _DrvEscape@24
objchk_wnet_x86\i386\mirror.dll : error LNK1120: 2 unresolved externals

ядро не экспортирует функции malloc(), free() (если оно их вообще поддерживает (точно сказать не могу потому как не в курсе API ядра Window$))
пользуйся экспортируемыми ядром функциями Mm* (более точно - в google)

Автор: Ak47black 15.6.2007, 00:38
А memcpy можно использовать или это тоже к WinApi идёт?

Автор: Rickert 15.6.2007, 07:19
Цитата(Ak47black @  15.6.2007,  00:38 Найти цитируемый пост)
А memcpy можно использовать или это тоже к WinApi идёт?

memcpy/free/malloc - это не winapi

Автор: MAKCim 15.6.2007, 09:59
Ak47black
смотри
http://msdn2.microsoft.com/en-us/library/ms801988.aspx

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)