释放对象的校验和不正确

时间:2012-04-01 00:48:42

标签: node.js express

在将数据发布到我的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'字符串

关于我做错的任何想法?

5 个答案:

答案 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服务器端,而这在您的示例范围内未定义。