在将数据发布到我的expressjs应用程序时,这就是我得到的:
node(58287,0x7fff771ad960) malloc: *** error for object 0x7ff8a8600c58: incorrect
checksum for freed object - object was probably modified after being freed.
*** set a breakpoint in malloc_error_break to debug
Abort trap: 6
知道为什么吗?
更新
以下是一些代码:
客户端:
$.ajax({
url: 'user/' + id,
type: 'POST',
dataType:'JSON',
data: JSON.stringify(data),
success: function(response){
console.log(response);
}
});
服务器端:
app.post('/user/:id', function(req,res){
var id = req.params.id;
console.log(data);
});
当我在客户端使用JSON.stringify 时,我遇到了这个奇怪的错误:
node(58461,0x7fff771ad960)malloc: *对象的错误 0x7fa861d00e28:释放对象的校验和不正确 - 对象是 可能在被释放后被修改。 * 在malloc_error_break中设置断点以调试Abort trap:6
当我在客户端不使用JSON.stringify 时,我在服务器端获得'null'字符串。
关于我做错的任何想法?
答案 0 :(得分:2)
这可能是nodejs
内部的错误。 (或者,如果expressjs有任何本机代码绑定,也许是expressjs。)
你自己在JavaScript中编写这种bug并不容易。如果您可以随意重现,他们可能会喜欢错误报告。尝试找出可以重现问题的最少量代码。
答案 1 :(得分:2)
我最近遇到了同样的错误。这是修复:
Node.js有一些错误导致它在OS X下从源代码不正确地安装(参见例如issue 2061)。好消息是打包的安装程序正确安装它。因此,只需卸载Node,然后前往http://nodejs.org/#download并运行Macintosh安装程序。
我已在Node问题跟踪器here上报告此错误。
答案 2 :(得分:1)
我今天刚收到此错误,并通过MacPorts将Node.js从0.8.9_0更新为0.8.10_1修复了此问题。
它似乎并没有特别贴切,因为错误报告和更改日志没有表明(http://blog.nodejs.org/2012/09/25/node-v0-8-10-stable/)
答案 3 :(得分:0)
我没有查看这些问题的原因(复数 - 显然至少有两个错误 - jquery,node,express),尽管摘要和解决方法是如下:
当你的客户端代码看起来像你更新的问题时,服务器显然不应该因malloc错误而崩溃(错误#1),尽管可以理解查询被错误处理,因为你告诉jquery发送json然后你发一个字符串。
bug#2沿着管道只是null --> "null"
。这至少不会导致服务器崩溃,因为数据类型匹配标头(即每个人都认为我们正在使用json),但有人将空值转换为字符串。我毫无根据的怀疑是它的表达/连接。
最后,解决方法只是以管理传输的方式包装数据,然后在服务器端解包:
客户端:
$.post({
url: 'user/' + id,
data: {workaround: JSON.stringify(data)}, // no null strings this way
success: function(response){
console.log(response);
}
});
服务器端:
app.post('/user/:id', function(req,res){
var id = req.params.id;
var data = JSON.parse(req.body.workaround); // unwrap
console.log(data);
});
如果我找时间,我会调查并尝试在某处发布错误报告(当你不知道这是谁的错误时会出现问题......),请尝试这样做。
答案 4 :(得分:0)
您正在调用'data'上的console.log服务器端,而这在您的示例范围内未定义。