对于释放的对象不正确的校验和
将数据发布到我的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时,我遇到了这个奇怪的错误:
节点(58461,0x7fff771ad960)malloc: 对象错误0x7fa861d00e28:释放对象的校验和不正确 – 对象可能在释放后被修改。 *在malloc_error_break中设置一个断点来debugging中止陷阱:6
当我不在客户端使用JSON.stringify时,服务器端会得到'null'string 。
任何想法,我做错了什么?
我最近经历了这个相同的错误。 这是修复:
Node.js有一些错误,导致它在OS X下从源代码安装不正确(参见例如问题2061 )。 好消息是, 打包的安装程序正确安装它。 所以,只需卸载节点,然后前往http://nodejs.org/#download并运行Macintosh安装程序。
我在这里报告了Node问题跟踪器上的这个错误。
这很可能是nodejs
内部的一个bug。 (或者,如果expressjs有任何本地代码绑定,也许expressjs。)
使用JavaScript自己编写这类错误并不容易。 如果你可以随意复制,他们可能会喜欢一个错误报告。 尝试找出可以重现问题的最less量的代码。
我今天刚刚得到这个错误,并且通过MacPorts从0.8.9_0更新Node.js到0.8.10_1修复了这个问题。
这似乎并没有被特别强调,因为错误报告和更改日志并不表示(http://blog.nodejs.org/2012/09/25/node-v0-8-10-stable/) 。
我没有看到这些问题的原因 (复数 – 至less有两个错误 – jQuery,节点,快递),虽然总结和解决方法如下:
当你的客户端代码看起来像你更新的问题时,服务器显然不应该与一个malloc错误(错误#1)崩溃,虽然这是可以理解的查询是虐待,因为你告诉jQuery发送JSON,然后你发送一个string。
bug#2沿着pipe道是简单的null --> "null"
。 这至less不会导致服务器崩溃,因为数据types匹配标题(即所有人都认为我们正在使用JSON),但有人正在将空值转换为string。 我毫无根据的怀疑是它expression/连接。
最后,解决方法是简单地将数据封装成可以传输的方式,然后在服务器端展开:
客户端:
$.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); });
如果我find时间,我会调查并尝试发布一个错误报告(这是一个问题,当你不知道这是谁的错误…),请尝试这样做。
你正在调用console.log服务器端的“数据”,这是没有在你的例子范围内定义。