У библеотеки каторую я пишу есть динамический массив с записями. Мая прога, каторая подключает эту библеотеку, в цикле вызывает процедуру в библеотеке с данными для добавления, библеотека если надо увеличивает размер массива и добавляет новый элемент...
- Код: Выделить всё
//----------------------- Либа ------------------------
library mylib;
type
TwoInt = record
one,two: integer;
end;
var myarr: array of TwoInt;
myarrCount: integer;
procedure AddItem(num, a1, a2: integer); cdecl;
begin
if myarrCount<num then begin
myarrCount:=num+1;
SetLength(myarr,myarrCount);
end;
myarr[num].one:=a1;
myarr[num].two:=a2;
end;
function GetItem1(num): integer; cdecl;
begin return:=myarr(num).one; end;
exports AddItem, GetItem;
end.
//-------------------------- Прога ---------------------------------
program test;
procedure AddItem(num, a1, a2: integer); cdecl; external 'libmylib.so';
function GetItem1(num): integer; cdecl; external 'libmylib.so';
var i: integr;
begin
//сдесь мы запалняем его данными, например
for i:= 0 to 50 do AddItem(i,i+1,i-2);
//сдесь идёт тело проги и куча вызовов функций и проц. из библеотеки например
for i:= 0 to 50 do GetItem1(i);
... и разные другие (каторые не делают SetLength) ...
// и вдруг нам приспичило добавить
for i:= 51 to 60 do AddItem(i,i+1,i-2);
end.
Когда в начяле запалняется массив то всё нормально, но при попытки позже добавить то выскакивает сообщение об ошибке:
SYSTEM_REMOVE_FROM_LIST_VAR$PMEMCHUNK_VAR
Ну и строчка указывает на SetLength в библеотеке. Номер ошибки 216.
Но что прикольно, при просмотре CallStack то 2 элемента он всёже добовляет.
PS fpc 2.0.0 (с 2.0.3 появляется обилие других глюков), Laz 0.9.12 (у меня почему-то 0.9.13beta светится)
PSS Прикрепляю скриншот CallStack-а, но там название совсем другие (процедур и переменных) но смысл тот-же. SetAtomTokenArray = AddItem, первый аргумент = num, второй = i и добовлялись элементы с 500 т.е. на 503 он спаткнулся.
Может быть пригодится...