powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Crash on cout << string
7 сообщений из 7, страница 1 из 1
Crash on cout << string
    #38501722
Фотография Yed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте. Есть многопоточный tcp сервер, который периодически вылетает. С помощью "Debug Diagnostic Tool" на реальных рабочих данных удалось поймать данную ситуацию. Вот стек вызовов (картинка для сохранения форматирования):



Строчка 269 процедуры и сама ClientThreadProc(), где происходит сбой, выглядят так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
#include <string>
...

void ClientThreadProc(void *lpParameter){    
  ...
  while (true){
    ...
    
    string id = device->GetId();
    if ( id.empty() ){
      continue;
    }

#ifdef _DEBUG
    cout << "ID: '" << id << "'" << endl;  // LINE 269
#endif
    
    ...
  }
}



Сообщение об ошибке, которое генерирует Visual Studio по dmp файлуUnhandled exception at 0x005341C6 (Device_Server_Dbg.exe) in Device_Server_Dbg__PID__5912__Date__12_15_2013__Time_03_06_53PM__531__Second_Chance_Exception_C0000005.dmp: 0xC0000005: Access violation writing location 0x00000000.

Помогите пожалуйста разобраться с данной ошибкой. Я не могу понять, почему sputc() генерирует ошибку.
Может дело в многопоточности и общем ресурсе - консоли? Но в данном случае происходит только чтение и далее посимвольный вывод строки в консоль. Скорее бы символы id из разных потоков стали перемешиваться при выводе, чем возникала бы ошибка. Или я не прав?
...
Рейтинг: 0 / 0
Crash on cout << string
    #38501745
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Винда? Консоль? Потоки? Сервер? И ты еще хочешь чтобы все это работало? Мечтатель...
У виндовых приложений консоль это дополнительная, не обязательная фича. Чтобы в нее успешно писать, надо либо самому позаботиться о существовании консоли, либо изначально собирать приложение как консольное и жить в одном единственном потоке.

Пиши в файл. Отправляй текст не в cout, а открывай файл и пиши в него.
...
Рейтинг: 0 / 0
Crash on cout << string
    #38501747
Фотография Yed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlВинда? Консоль? Потоки? Сервер? И ты еще хочешь чтобы все это работало? Мечтатель...
Да! Да! Да! Да! Да!

На самом деле вывод в консоль используется только в процессе отладки приложения. Приложение консольное Win32. В релиз версии только основной поток выводит шапку-заголовок приложения и все.

Можно и файл, но причина данной ошибки действительно в работе с консолью из разных потоков?
А если блокировать доступ к консоли, например, критической секцией?
...
Рейтинг: 0 / 0
Crash on cout << string
    #38501764
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YedМожно и файл, но причина данной ошибки действительно в работе с консолью из разных потоков?
А если блокировать доступ к консоли, например, критической секцией?Да там не проблема доступа. В винде stdout может просто отсутствовать у вторичных процессов и потоков.
...
Рейтинг: 0 / 0
Crash on cout << string
    #38502174
Фотография Yed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlДа там не проблема доступа. В винде stdout может просто отсутствовать у вторичных процессов и потоков.
спасибо! буду разбираться подробнее.
...
Рейтинг: 0 / 0
Crash on cout << string
    #38502270
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlВ винде stdout может просто отсутствовать у вторичных процессов и потоков.

Отсутствие stdout не вызывает ошибку записи в нулевой адрес.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Crash on cout << string
    #38502676
Фотография NekZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl,

Я думаю freopen тут будет более удобен.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Crash on cout << string
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]