2012-04-01 113 views
5

上发布的数据,以我的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: * error for object 0x7fa861d00e28: incorrect checksum for freed object - object was probably modified after being freed. * set a breakpoint in malloc_error_break to debug Abort trap: 6

当我在客户端不使用JSON.stringify,我得到“空'字符串在服务器端。

关于我在做什么的错误?

+0

出于好奇,您使用的是哪个版本的Node? – 2012-04-03 03:06:44

+0

v0.6.12在mac上 – Rajat 2012-04-03 03:49:55

回答

2

我最近经历了同样的错误。下面是修复:

Node.js有一些错误,导致它在OS X下从源安装不正确(请参阅,例如issue 2061)。好消息是打包安装程序正确安装它。因此,只需卸载节点,然后前往http://nodejs.org/#download并运行Macintosh安装程序。

我已经在节点问题跟踪器here上报告了这个错误。

2

这很容易成为nodejs的内部错误。 (或者,如果expressjs有任何本机代码绑定,也许expressjs。)

有没有简单的方法让您自己用JavaScript编写这类错误。如果您可以随意重现,他们可能会喜欢一个错误报告。尝试找出可以重现问题的最少量的代码。

0

我没有看过成造成这些问题(复数形式 - 有明确的至少某处沿线两个错误 - jQuery的节点,表达),虽然总结和解决方法如下:

当你的客户端代码看起来像你的更新的问题时,服务器显然不应该与malloc错误(错误#1)崩溃,虽然可以理解的是,查询被虐待,因为你告诉jQuery发送json和然后你发送一个字符串。

沿管道错误#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); 
}); 

如果我找到时间,我会调查并尝试并发布ab ug报告某处(这是一个问题,当你不知道这是谁的错......),请尝试这样做。

+0

我在expressjs google群组上发布了这个问题,但我还没有收到任何回应。 – Rajat 2012-04-06 18:05:06

+0

此外,我发布的客户端代码中的查询没有错误。 'dataType':'json'是您期望从服务器得到的响应格式,而不是您发送给它的数据类型。 – Rajat 2012-04-06 18:06:59

+0

@Rajat,的确,'dataType'总是让我跳起来,代理它被重命名为'returnDataType' ...解决方法仍然有效,而且在此期间很容易实现。 – davin 2012-04-07 18:50:47

0

你正在调用console.log服务器端的'数据',这是没有在你的例子范围内定义。

1

我今天刚刚得到这个错误,并且通过MacPorts从0.8.9_0更新Node.js到0.8.10_1解决了这个问题。
虽然似乎没有特别提到,但由于错误报告和更改日志未指出(http://blog.nodejs.org/2012/09/25/node-v0-8-10-stable /)。