可以安全地忽略"尝试释放未引用的标量"错误吗?

jk.*_*jk. 5 perl

我还没弄清楚是什么导致它,但我想知道是否有任何影响错误(警告?)消息"尝试释放未引用的标量:SV 0x825b790在全局销毁期间".对于未经训练的人来说,似乎由于编译器不愿意检测到问题,因此它没有继续并重新删除未引用的内存.

这只是告诉我我的编程很草率吗?或者是否存在我应该关注的真正问题?

背景:这不是我的代码,我没有时间去追捕问题,我应该注意到它正在程序结束时发生.

ike*_*ami 8

这是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)