Странная реакция на добавление объектов и файлов в код сервера

Рейтинг: 0Ответов: 1Опубликовано: 10.04.2015

У меня есть клиент-серверное приложение на c++ под linux. Программа работатет и без проблем получает данные, но как только я добавляю объекты на сервер boost::property_tree::ptree или std::ofstream сразу же выдается ошибка вида: "recv failed: Bad address". С чем это может быть связано?

Мой код:

while( (read_size = recv(client_sock , (void*)msg , 2000 , 0)) > 0 )
    {
    //Send the message back to client
    std::cout << msg;
    //boost::property_tree::ptree heroTree; if uncomment - does not work
    //std::ofstream myfile; if uncomment - does not work
     write(client_sock , (void*)msg , sizeof(msg));
     }
    if(read_size == 0)
{
    puts("Client disconnected");
    fflush(stdout);
}
else if(read_size == -1)
{
    perror("recv failed");
}

Ответы

▲ 2

Увы информации мало, но скорее всего вы наткнулись на undefined behaviour. Если судить по приведенному коду, то возникает скорее всего из-за некорректной работы с msg.

  1. Проверьте не удаляете ли случайно где-то msg, а потом используется удаленная память?
  2. Размер выделенной памяти, на которую указывает msg, точно >= 2000 байт?
  3. Строка write(client_sock , (void*)msg , sizeof(msg)); выглядит сомнительной и корректна только в случае если msg статический массив. Либо вы хотите отправить адрес.

Если код не сильно большой, то лучше всего привести полностью, в крайнем случае выложить на ideone.