Отличие компиляции Debug и Release

Тема в разделе "MS Visual C++", создана пользователем ivs4, 20 июн 2006.

Статус темы:
Закрыта.
  1. ivs4

    ivs4 Гость

    Здравствуйте. Возник такой вопрос. Делаю проект. в котором работаю с Windows Socket. Для обработки подключений к серверу использую оконные сообщения при помощи функции

    Код (Text):
        ires=WSAAsyncSelect(sock,this->m_hWnd,WM_SOCK,FD_ACCEPT);
    где WM_SOCK - мое сообщение для прослушивающего сокета

    Код (Text):
    UINT WM_SOCK=RegisterWindowMessage("MYSOCKETMESSAGE");
    В этом сообщении я вызываю функцию WSAAcept для создания дочернего сокета

    Код (Text):
    s2=WSAAccept(s,(SOCKADDR*)(&addr),&size,ConditionFunc,DWORD(&m_explorer));
    Теперь самое интересное. При компиляции Win32 Debug все хорошо, а при Win32 Release - первый раз подключение проходит нормально, а на второй вываливается ошибка доступа к памяти. Пока не установил причину сего. Подскажите, пожалуйста, в каком напрвлении искать. И какие различия бывают при компиляции Debug и Release.
     
  2. grigsoft

    grigsoft Well-Known Member

    Регистрация:
    15 ноя 2005
    Сообщения:
    735
    Симпатии:
    0
    Самая частая проблема - неинициализированные переменные и выделенная память. Поставь WarningLevel=4, может на что укажет. Ну и ручками проверь, что все переменные должны сразу устанавливаться, запись
    Код (Text):
    int nLen, size;
    неправильная. Всегда должно быть
    Код (Text):
    int nLen=0, size=0;
     
  3. ivs4

    ivs4 Гость

    Все инициализирую, WarningLevel 4 ничего не дал. Даже не знаю. Сейчас ищу в направлении сообщений окна и использования прослушивающего сокета.
     
  4. grigsoft

    grigsoft Well-Known Member

    Регистрация:
    15 ноя 2005
    Сообщения:
    735
    Симпатии:
    0
    Тогда я бы плясал от ошибки. Какой код падает, к какой памяти, кто эту память выделяет и т.д. Ну и синхронизацию потоков проверить.
     
  5. Kmet

    Kmet Well-Known Member

    Регистрация:
    25 май 2006
    Сообщения:
    1.018
    Симпатии:
    1
    Как вариант такое поведение возможно при неверном использовании ASSERT, когда в нем происходит не только проверка, например ASSERT(*p=new char[10]). Надуманный конечно пример <_<
     
  6. ivs4

    ivs4 Гость

    Появилась зацепка. Ошибка уходит если в Project Settings в C/C++ -> Code generation -> Use run-time library вместо Multithreaded DLL выбрать Debug Multithreaded DLL. Хотелось бы узнать, чем отличаются проекты при данных установках.
     
  7. Kmet

    Kmet Well-Known Member

    Регистрация:
    25 май 2006
    Сообщения:
    1.018
    Симпатии:
    1
    MSDN:Fixing Release Build Problems
    MSDN:Common Problems When Creating a Release Build
    народный опыт по данной проблеме ))
     
  8. ivs4

    ivs4 Гость

    Сократил все телодвижения с памятью до минимума. Однозначно выходит, что проблема при повторном вызове WSAAccept. Очень странно, Америка здесь не открывется. Эта функция вызывается в обработчике моего сообщения на состояние слушающего сокета FD_ACCEPT. Есть похожие примеры. Может ли быть проблема в области вызова WSAAsyncSelect

    Код (Text):
    ires=WSAAsyncSelect(sock,this->m_hWnd,WM_SOCK,FD_ACCEPT);
    или привязки функции к сообщению

    Код (Text):
    UINT WM_SOCK=RegisterWindowMessage("MYSOCKETMESSAGE");
    ...
    ON_REGISTERED_MESSAGE( WM_SOCK, OnMyMessage )
    ...
    void CWSServerDlg::OnMyMessage()
    {
    ...
    const MSG *swl=GetCurrentMessage();
    ev=LOWORD(swl->lParam);//идентификатор события на сокете
    er=HIWORD(swl->lParam);//код ошибки
    s=SOCKET(swl->wParam);//дескриптор прослушующего сокета

    s2=WSAAccept(s,(SOCKADDR*)(&addr),&size,NULL,0);
    ...
    }
    И еще есть наблюдение. Если свернуть окно до начала подключения клиентов и так оставить, то вроде работает. Если же развернуть, щелкнуть мышью в окне, то вылезает ошибка памяти.
    Большая просьба поделиться соображеними.
     
  9. Cisco

    Cisco Гость

    Есть ли функция, позволяющая изменять текст в записи listbox, т.е. противоложность GetText() - что-то вроде "PutText()". InsertString - не хочется использовать, т.к. просто надо изменить текст.
     
  10. artiom_kh

    artiom_kh Гость

    Выложи проект, пипл посмотрит
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей