我有一个库“libqscr.so”,我在运行时使用 dlopen 将其加载到我的程序中。它工作得很好,在我重新启动我的电脑后,dlopen 开始给我这个错误:
*** Error in `/path/to/program': realloc(): invalid pointer: 0xbfffef5c ***
我试过重新编译库,但问题仍然存在。我注意到它仅在路径正确时发生,否则返回 null。顺便说一句,我在 Ubuntu 14.04 上运行所有这些。
编辑:我注意到这个问题只发生在那个特定的库中,其他的加载正常。
EDIT2:所以我已经跟踪到库的问题,甚至是导致它的函数。我注意到,如果我删除了 setLength 函数,一切都会开始正常工作:
alias Tqarray = Tqvar[];
Tqarray[string] vals;
struct Tqvar{
string s;
double d;
bool ii = true;
}
Tqvar setLength(Tqlist args){
Tqvar r = args.read(0);
vals[r.s].length=to!uint(trunc(args.read(1).d));
return r;
}
任何想法为什么会发生这种情况?
另一个编辑(3):我删除了 trunc 函数调用,现在一切正常。任何解释为什么会发生的答案,我都会接受。