Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Invalid Pointer operation


вова ©   (2013-11-24 20:21:00) 

 vBlob := ClientDataSet3.CreateBlobStream
   (ClientDataSet3.FieldByName('massSample'), bmRead);
 SetLength(BufX, vBlob.Size div SizeOf(word));

 try
   vBlob.Seek(0, soFromBeginning); // sереход в начало потока BLOB
   vBlob.ReadBuffer(BufX[0], vBlob.Size);
   if vBlob.Size = 0 then
   begin
     vBlob.free;
     exit;
   end;
 finally
   vBlob.free;
 end;


вот код, но если vBlob.Size = 0, то на слове exit; он вылетает с ошибкой Invalid Pointer operation. и я не понял. Ну да, блоб пустой, но я же его создавал, значит нужно и освободить, чего ему не нравится и как правильно?


Anatoly Podgoretsky   (2013-11-25 13:55:00) [1]


begin
   vBlob.free;
   exit;
end;

А смысл в этот какой?
Убрать, начиная с    if vBlob.Size = 0 then


Юрий Зотов   (2013-11-25 00:19:00) [2]

> вова

И есть подозрение, что при такой установке длины массива весь поток в него не влезет. Да и надо ли вообще копировать поток в массив?


Юрий Зотов   (2013-11-24 23:50:00) [3]

> вова
if vBlob.Size = 0 then

Наверное, эту проверку лучше делать сразу после создания vBlob?

vBlob := ClientDataSet3.CreateBlobStream(...);
try
 if vBlob.Size <> 0 then
 begin
   ...
 end  
finally
 vBlob.free
end;


RWolf   (2013-11-24 21:58:00) [4]

да.


вова   (2013-11-24 21:15:00) [5]

т.е. если даже делаешь exit, то он все равно заходит в finally??


RWolf   (2013-11-24 20:39:00) [6]

vBlob.free может выполниться два раза.


Наверх

Титульная страница Поиск, карта сайта Написать письмо