У библеотеки каторую я пишу есть динамический массив с записями. Мая прога, каторая подключает эту библеотеку, в цикле вызывает процедуру в библеотеке с данными для добавления, библеотека если надо увеличивает размер массива и добавляет новый элемент...
- Код: Выделить всё
- //----------------------- Либа ------------------------
 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 он спаткнулся.
Может быть пригодится...




