Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Системное программирование и WinAPI > WSAAceept выдает ошибку памяти |
Автор: ivs41 5.7.2006, 20:15 | ||||
Добрый день. Возникла следующая ситуация. Создаю сокет. Перевожу его в асинхронный режим с помощью WSAAsyncSelect (на оконных сообщениях).
В функции обработчике сообщения WM_SOCK вызываю функцию WSAAccept для создания дочернего сокета
Происходит так, что при компиляции Debug все работает нормально: многократно отрабатывает WSAAccept и создаются дочерние сокеты. При переходе же на Release первый раз WSAAccept отрабатывает нормально, а на второй - выходит ошибка доступа к памяти. Конструкция не оригинальна потому и странно, что возникла здесь проблема. Большая просьба помочь советом. Если нужно, предоставлю подробный код. |
Автор: Earnest 6.7.2006, 06:54 |
Версия Release здорово отличается от Debug, поэтому нет ничего странного в том, что Debug работает, а Release - нет. В 99,9% случаев -это следствие ошибки в программе, которая в Debug'е "удачно" проскакивает. Общий рецепт такой: сначала локализуй место (с помощью отладочных сообщений OutputDebugString), выясни причину падения (в твоем случае - явно какая-то переменная испортилась, возможно, кто-то на нее "наехал"), потом анализируй код и думай. Часто бывает, что программа валится вовсе не там, где произошла ошибка. Тогда включи в отладочную печать "испорченную" переменную и отследи, где она портится. Ну и т.д. Где-то в форуме была ссылка на статью "Как пережить релиз" (что-то вроде), почитай, полезно. |