我还没弄清楚是什么导致它,但我想知道是否有任何影响错误(警告?)消息"尝试释放未引用的标量:SV 0x825b790在全局销毁期间".对于未经训练的人来说,似乎由于编译器不愿意检测到问题,因此它没有继续并重新删除未引用的内存.
这只是告诉我我的编程很草率吗?或者是否存在我应该关注的真正问题?
背景:这不是我的代码,我没有时间去追捕问题,我应该注意到它正在程序结束时发生.
这是XS模块或Perl本身的错误.这意味着已经请求释放已经解除分配的标量.
这表明某些代码持有它认为有效的指针,但实际上并非如此.这可能导致代码写入内存,代码不应该修改,这可能导致数据完整性问题,段错误等.
据检测,当程序退出,但发生的问题可能在任何时候发生.从释放错误到发出错误之前,您会遇到问题.
例如,
use Inline C => <<'__EOI__';
void buggy(SV* sv) {
SvREFCNT_dec(sv);
}
__EOI__
my $x;
buggy($x);
# $x is no longer allocated here, but I could still try to use it.
Run Code Online (Sandbox Code Playgroud)
输出:
Attempt to free unreferenced scalar: SV 0xc43fc0, Perl interpreter: 0xc22690.
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
943 次 |
| 最近记录: |