Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ошибка компиляции (прошу помощи), пишет, что нет исходного кода... 
:(
    Опции темы
gagar
Дата 21.5.2010, 09:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 3.8.2007

Репутация: нет
Всего: нет



Компилятор: Visual Studio C++ Express Edition 2008 

В чем проблема: программа начинает выполняться и вылетает Access Violation.

Исходный код (на том месте, где вылетает программа):

Код

BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
    //  -----------------------------------------------------------------------------------------
    //  ШАГ 1:

        HWND hWnd;
        hInst = hInstance; // Сохранить дескриптор экземпляра в глобальной переменной
    
    //  -----------------------------------------------------------------------------------------
    //  ШАГ 2: Создаем окно

        hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
                            CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);
        
        if (!hWnd)
        {
            return FALSE;
        }
        
        ShowWindow(hWnd, nCmdShow);
        UpdateWindow(hWnd);

    //  -----------------------------------------------------------------------------------------
    //  ШАГ 4: Устанавливаем соединение с базой данных

        //db.connect();
        
    //  -----------------------------------------------------------------------------------------
    //  ШАГ 5: Запускаем поток сбора новостных сообщений

        HANDLE hThread;
        DWORD  dwThreadID;

// !!! ВОТ ТУТ ВЫЛЕТАЕТ !!!
        hThread = CreateThread(NULL,0,ClearThread,0,0,&dwThreadID);
        
    //  -----------------------------------------------------------------------------------------
        return TRUE;
}


Вылетает в 35 строке!

Что пишет отладчик:

Код

"smip.clear.exe": Загружено: "E:\smip\smip.clear\Debug\smip.clear.exe", Символы загружены.
"smip.clear.exe": Загружено "C:\WINDOWS\system32\ntdll.dll"
"smip.clear.exe": Загружено "C:\WINDOWS\system32\kernel32.dll"
"smip.clear.exe": Загружено "C:\WINDOWS\system32\user32.dll"
"smip.clear.exe": Загружено "C:\WINDOWS\system32\gdi32.dll"
"smip.clear.exe": Загружено "C:\WINDOWS\system32\advapi32.dll"
"smip.clear.exe": Загружено "C:\WINDOWS\system32\rpcrt4.dll"
"smip.clear.exe": Загружено "C:\WINDOWS\system32\secur32.dll"
"smip.clear.exe": Загружено "C:\WINDOWS\system32\libmySQL.dll"
"smip.clear.exe": Загружено "C:\WINDOWS\system32\wsock32.dll"
"smip.clear.exe": Загружено "C:\WINDOWS\system32\ws2_32.dll"
"smip.clear.exe": Загружено "C:\WINDOWS\system32\msvcrt.dll"
"smip.clear.exe": Загружено "C:\WINDOWS\system32\ws2help.dll"
"smip.clear.exe": Загружено: "C:\WINDOWS\system32\libxml2.dll", Двоичный код не был построен с отладочной информацией.
"smip.clear.exe": Загружено: "C:\WINDOWS\system32\iconv.dll", Двоичный код не был построен с отладочной информацией.
"smip.clear.exe": Загружено: "C:\WINDOWS\system32\zlib1.dll", Двоичный код не был построен с отладочной информацией.
"smip.clear.exe": Загружено: "C:\WINDOWS\system32\curllib.dll", Двоичный код не был построен с отладочной информацией.
"smip.clear.exe": Загружено: "C:\WINDOWS\system32\ssleay32.dll", Двоичный код не был построен с отладочной информацией.
"smip.clear.exe": Загружено: "C:\WINDOWS\system32\libeay32.dll", Двоичный код не был построен с отладочной информацией.
"smip.clear.exe": Загружено "C:\WINDOWS\WinSxS\x86_Microsoft.VC90.CRT_1fc8b3b9a1e18e3b_9.0.30729.1_x-ww_6f74963e\msvcr90.dll"
"smip.clear.exe": Загружено: "C:\WINDOWS\system32\openldap.dll", Двоичный код не был построен с отладочной информацией.
"smip.clear.exe": Загружено "C:\WINDOWS\system32\libsasl.dll"
"smip.clear.exe": Загружено "C:\WINDOWS\WinSxS\x86_Microsoft.VC90.DebugCRT_1fc8b3b9a1e18e3b_9.0.30729.1_x-ww_f863c71f\msvcr90d.dll"
"smip.clear.exe": Загружено "C:\WINDOWS\system32\imm32.dll"
"smip.clear.exe": Загружено "C:\WINDOWS\system32\msctf.dll"
"smip.clear.exe": Загружено "C:\WINDOWS\system32\version.dll"
"smip.clear.exe": Выгружено: "C:\WINDOWS\system32\version.dll"
"smip.clear.exe": Загружено "C:\WINDOWS\system32\apphelp.dll"
"smip.clear.exe": Загружено "C:\WINDOWS\system32\msctfime.ime"
"smip.clear.exe": Загружено "C:\WINDOWS\system32\ole32.dll"
Первый этап обработки исключения в "0x00412ca7" в "smip.clear.exe": 0xC00000FD: Stack overflow.
Необработанное исключение в "0x00412ca7" в "smip.clear.exe": 0xC00000FD: Stack overflow.


Что в дизасемблере:

Код

00412C9A  pop         ecx  
00412C9B  xchg        eax,esp 
00412C9C  mov         eax,dword ptr [eax] 
00412C9E  mov         dword ptr [esp],eax 
00412CA1  ret              
00412CA2  sub         eax,1000h 
// !!! Вот тут косяк !!!
00412CA7  test        dword ptr [eax],eax 
00412CA9  jmp         cs10 (412C94h) 
--- Нет исходного файла --------------------------------------------------------
00412CAB  int         3    
00412CAC  int         3    
00412CAD  int         3    
00412CAE  int         3    
00412CAF  int         3    
00412CB0  int         3    
00412CB1  int         3    
00412CB2  int         3    
00412CB3  int         3    
00412CB4  int         3    
00412CB5  int         3    
strcat_s:
00412CB6  jmp         dword ptr [__imp__strcat_s (672470h)] 


Стек вызова:
Код

>    smip.clear.exe!_chkstk()  Строка 99    Asm


В чем тут может быть проблема???
PM MAIL   Вверх
gagar
Дата 21.5.2010, 12:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 3.8.2007

Репутация: нет
Всего: нет



Проблема решилась!

Я после создания потока, внутри функции, выполняющейся в потоке инициализировал класс, в котором есть поле данных размером 2048000 байт!!!. Которое к тому же передавалось в функцию через стек... Естественно, в такой ситуации происходило переполнение стека. Сейчас буду переписывать этот кусок кода "по человечески". 

Меня смущает только одно... почему этот косяк не обнаружился компилятором? Он вызывал переполнение стека при вызове функции CreateThread, а не позже, при создании класса, или даже при его использовании.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0569 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.