[Lazarus] SEGFAULT: difference between pointer and dynarray?
xrfang
xrfang at gmail.com
Sun Dec 30 06:21:22 CET 2012
Hi leledumbo,
I have a few questions:
1) what's the difference between open array and dynamic array? Is "array of Integer" open or dynamic?
2) How to report a bug, and I believe this maybe a bug in the fpc compiler?
Thanks
在 日, 12月 30, 2012 at 12:30 下午,leledumbo <leledumbo_cool at yahoo.co.id> 写道:
Sorry, I think I was too fast in reading the unit. After reading slowly, the
APIs actually uses open array, not dynamic array. In this case @lib should
be the same as @lib[0], but here's something interesting: I tried your code
(converted as program):
uses
lua52;
type
TluaLReg = array of luaL_Reg;
var
LUA: Plua_State;
lib : array of luaL_Reg;
//lib : PluaL_Reg;
i: Integer;
function l_dat_upd(LUA: Plua_State): LongInt; cdecl;
begin
end;
function l_dat_clr(LUA: Plua_State): LongInt; cdecl;
begin
end;
begin
LUA := luaL_newstate();
luaL_openlibs(LUA);
SetLength(lib, 2);
//SetLength(TluaLReg(lib), 2);
lib[0].name := 'update';
lib[0].func := @l_dat_upd;
lib[1].name := 'clear';
lib[1].func := @l_dat_clr;
writeln('actual = $'+HexStr(ptruint(@lib),8));
luaL_newlib(LUA, lib);
lua_setglobal(LUA, 'data');
lua_close(LUA);
end.
inserting some writelns in lua52 unit near problematic functions and running
in gdb results in:
luaL_newlib oa = $BFFFEE30
luaL_setfuncs oa = $BFFFECC0
Program received signal SIGSEGV, Segmentation fault.
0xb7e386d2 in ?? () from /lib/i386-linux-gnu/libc.so.6
(gdb) bt
#0 0xb7e386d2 in ?? () from /lib/i386-linux-gnu/libc.so.6
#1 0xb7fa2d12 in ?? () from /usr/lib/i386-linux-gnu/liblua5.2.so.0
#2 0xb7f95f09 in lua_setfield () from
/usr/lib/i386-linux-gnu/liblua5.2.so.0
#3 0xb7fa9a9a in luaL_setfuncs () from
/usr/lib/i386-linux-gnu/liblua5.2.so.0
#4 0x08066821 in LUAL_SETFUNCS (L=0x8071008, LR=..., highLR=1, NUP=0) at
lua52.pas:835
#5 0x080669e4 in LUAL_NEWLIB (L=0x8071008, LR=..., highLR=1) at
lua52.pas:859
#6 0x0804a3ea in main () at test.pas:31
As you can see, the pointer changes when you pass an open array into another
function expecting open array, even when static array is used (I've tried
that one too). So, somebody with enough compiler knowledge should analyze
this. Maybe you should create a bug report.
--
View this message in context: http://free-pascal-lazarus.989080.n3.nabble.com/Lazarus-SEGFAULT-difference-between-pointer-and-dynarray-tp4028296p4028316.html
Sent from the Free Pascal - Lazarus mailing list archive at Nabble.com.
--
_______________________________________________
Lazarus mailing list
Lazarus at lists.lazarus.freepascal.org
http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.lazarus-ide.org/pipermail/lazarus/attachments/20121230/225ce5ad/attachment-0003.html>
More information about the Lazarus
mailing list