Форум: "Начинающим";
Текущий архив: 2014.11.23;
Скачать: [xml.tar.bz2];
ВнизInvalid Pointer operation Найти похожие ветки
← →
вова (2013-11-24 20:21) [0]
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. и я не понял. Ну да, блоб пустой, но я же его создавал, значит нужно и освободить, чего ему не нравится и как правильно?
← →
RWolf © (2013-11-24 20:39) [1]vBlob.free может выполниться два раза.
← →
вова (2013-11-24 21:15) [2]т.е. если даже делаешь exit, то он все равно заходит в finally??
← →
RWolf © (2013-11-24 21:58) [3]да.
← →
Юрий Зотов © (2013-11-24 23:50) [4]> вова
if vBlob.Size = 0 then
Наверное, эту проверку лучше делать сразу после создания vBlob?
vBlob := ClientDataSet3.CreateBlobStream(...);
try
if vBlob.Size <> 0 then
begin
...
end
finally
vBlob.free
end;
← →
Юрий Зотов © (2013-11-25 00:19) [5]> вова
И есть подозрение, что при такой установке длины массива весь поток в него не влезет. Да и надо ли вообще копировать поток в массив?
← →
Anatoly Podgoretsky © (2013-11-25 13:55) [6]
begin
vBlob.free;
exit;
end;
А смысл в этот какой?
Убрать, начиная с if vBlob.Size = 0 then
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2014.11.23;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.002 c