Заранее извиняюсь, с OpenGL совсем не знаком, но все-же:
Может быть, проблемы в разных менеджерах памяти? У Борланда есть свой, довольно быстрый, менеджер памяти, он используется при вызове дельфовой функции GetМем. Может быть, библиотека OpenGL о нем ничего не знает и пытается освободить память, используя стандартный системный менеджер памяти, т.е. освободить память, которую и не выделяли.
А этот пример и не должен работать:
То есть:
procedure combineCallback(coords : PTVector; data : PTArray4D;
weight : TArray4F; var dataout : Pointer); stdcall;
var
vert:Array [0..5] Of Double;
begin
vert[0] := coords[0];
vert[1] := coords[1];
vert[2] := coords[2];
dataOut := @vert;
end;
По сути - то же самое, но картинка уже другая.
тут массив vert создается на стеке и затирается произвольными данными сразу после выхода из процедуры combineCallback, поэтому картинка может быть весьма причудливая.
В примере на C++ используется функция new_vertex(), может быть, нужно и здесь использовать ее, чтобы выделение памяти шло совместимым с OpenGL методом?