неверная контрольная сумма для освобожденного объекта - PullRequest
5 голосов
/ 01 апреля 2012

При отправке данных в мое приложение 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 для отладки прерывания прерывания: 6

Когда я не использую JSON.stringify на стороне клиента, я получаю 'null 'строки на стороне сервера.

Любые идеи о том, что я делаю неправильно?

Ответы [ 5 ]

2 голосов
/ 23 апреля 2012

Я недавно столкнулся с такой же ошибкой.Вот исправление:

В Node.js были некоторые ошибки, которые приводили к неправильной установке из исходного кода под OS X (см., Например, выпуск 2061 ).Хорошей новостью является то, что упакованный установщик устанавливает его правильно. Итак, просто удалите Node, затем перейдите на http://nodejs.org/#download и запустите установщик Macintosh.

Я сообщил об этомошибка в трекере проблем узлов здесь .

2 голосов
/ 01 апреля 2012

Это может быть ошибкой во внутренних органах nodejs.(Или, если у expressjs есть привязки нативного кода, возможно, expressjs.)

Нет простого способа написать такую ​​ошибку самостоятельно в JavaScript.Если вы можете воспроизвести это по своему усмотрению, они, вероятно, хотели бы сообщить об ошибке.Попробуйте выяснить наименьшее количество кода, способного воспроизвести проблему.

1 голос
/ 26 сентября 2012

Я только что получил эту ошибку сегодня, и обновление Node.js через MacPorts с 0.8.9_0 до 0.8.10_1 устранило проблему.
Не похоже, что это было специально решено, поскольку сообщения об ошибках и журнал изменений не указывают на это (http://blog.nodejs.org/2012/09/25/node-v0-8-10-stable/).

0 голосов
/ 31 мая 2012

Вы вызываете console.log на стороне сервера для 'data', которая не определена в области действия вашего примера.

0 голосов
/ 05 апреля 2012

Я не изучил причину этих проблем (множественное число - где-то вдоль линии явно есть как минимум две ошибки - jquery, node, express), хотя сводка и обходные пути следующие:

Когда ваш клиентский код выглядит так, как в вашем обновленном вопросе, сервер, очевидно, не должен аварийно завершить работу с ошибкой 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);
});

Если я найду время, я исследую и постараюсь опубликовать ошибкусообщить куда-нибудь (это проблема, когда вы не знаете, чья это вина ...), попробуйте также сделать это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...