Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Падает программа по непонятной мне причине


Автор: Elfet 19.5.2010, 20:44
Всем привет!

Пишу программу для расчёту потока по диплому. Однако возникла проблема, когда запускаю расчёт программа через 5 минут падает по непонятной мне причине. Запустил в дебаге, но это не помогло мне понять по чему падает.

Возможно, вам что-то это скажет? Почему  может падать программа? 

Цитата
0x77c44685     movb   $0x0,0x77c5f04d


Цитата
0    ntdll!RtlpSetUserPreferredUILanguages    C:\Windows\system32\ntdll.dll    0    0x77c44685    
1    ntdll!RtlInitUnicodeString    C:\Windows\system32\ntdll.dll    0    0x77c2d55f    
2    ntdll!RtlTraceDatabaseValidate    C:\Windows\system32\ntdll.dll    0    0x77c0fa18    
3    ntdll!RtlpSetUserPreferredUILanguages    C:\Windows\system32\ntdll.dll    0    0x77c456df    
4    ntdll!RtlTraceDatabaseValidate    C:\Windows\system32\ntdll.dll    0    0x77c07aca    
5    ntdll!RtlUnicodeStringToOemString    C:\Windows\system32\ntdll.dll    0    0x77bd2d68    
6    msvcrt!free    C:\Windows\system32\msvcrt.dll    0    0x774198cd    
7    ??  0    0x00390000    
8    ??  0    0x00000000    


Заранее спасибо! 

Автор: azesmcar 19.5.2010, 20:46
а что это может сказать? покажи код на какой строке вылетает, debugger должен показывать.

Автор: Elfet 19.5.2010, 20:47
В консоль приложения выводится следующее:
Цитата
Heap block at 0B272B78 modified at 0B286718 past requested size of 13b98
HEAP[SmartFlow.exe]: 
Invalid address specified to RtlFreeHeap( 00390000, 0B272B80 )
HEAP[SmartFlow.exe]: 
Heap block at 0B286728 modified at 0B29A2C8 past requested size of 13b98
HEAP[SmartFlow.exe]: 
Invalid address specified to RtlFreeHeap( 00390000, 0B286730 )
HEAP[SmartFlow.exe]: 
Heap block at 1227FFE0 modified at 12293B80 past requested size of 13b98
HEAP[SmartFlow.exe]: 
Invalid address specified to RtlFreeHeap( 00390000, 1227FFE8 )


Добавлено через 25 секунд
azesmcar, в том-то и дело что не показывает :(

Автор: azesmcar 19.5.2010, 20:47
похоже на то, что удаляется какой-то "левый" указатель. Код покажи.

Добавлено через 1 минуту и 6 секунд
Цитата(Elfet @  19.5.2010,  20:47 Найти цитируемый пост)
azesmcar, в том-то и дело что не показывает :( 

попробуй пошаговое выполнение, проект компилируется в debug или в release?

Автор: Elfet 19.5.2010, 20:58
azesmcar, кода там оочень много smile http://code.google.com/p/smart-flow/source/browse/#svn/trunk/SmartFlowLib/Source

Проект компилируется в debug. Пошагово невозможно сделать, так как падает после огромного количества итераций и точно сказать где не могу.

Добавлено через 10 минут и 35 секунд
Что-то при работе с памятью видимо:
Цитата
HEAP[SmartFlow.exe]: 
Heap block at 11E5AB90 modified at 11E6E730 past requested size of 13b98


Как бы найти то из-за чего падает, если дебагер не показывает это место?  smile

Добавлено через 11 минут и 35 секунд
И на одном и том же месте:
Цитата
0x77c44685     movb   $0x0,0x77c5f04d

Автор: azesmcar 19.5.2010, 21:11
может пора обновить компилятор?
судя по коду ты все еще шестой версией работаешь.

Автор: Elfet 19.5.2010, 21:14
У меня вообще-то minGW из QtSDK smile

Автор: Earnest 19.5.2010, 21:16
Можно повставлять в код проверки хипа, чтобы понять, после чего он портится. Примертно так:
   ASSERT (_CrtCheckMemory());
Сначала выясни, в каком примерно участке кода: когда программа валится (в среде), посмотри стек. Может, сразу поймешь, в чем дело. Если нет, обкладывай проверками свой цикл или что-там у тебя. После каждой строчки кода вставлять проверки не надо, умаешься ждать. Действуй дихотомическим разбиением, сужай круги. 

Автор: azesmcar 19.5.2010, 21:17
Цитата(Elfet @  19.5.2010,  21:14 Найти цитируемый пост)
У меня вообще-то minGW из QtSDK smile 

там же вроде MFC используется? или я не там смотрю? 

а дебагер какой?

Добавлено через 4 минуты и 19 секунд
да..это я не туда смотрел.

Автор: Elfet 19.5.2010, 21:26
Earnest, а куда вставить и что для проверки хипа? 


azesmcar, дебагер тоже из коробки SDK.

Автор: jonie 20.5.2010, 00:45
у вас память порченная... если проект под nix модно запустить, то используйте valgring, также помочь может продукт IBM Rational PurifyPlus (винда) или другие продукты (http://en.wikipedia.org/wiki/Memory_debugger) а также статья мелкософта http://msdn.microsoft.com/en-us/library/aa293901%28VS.60%29.aspx

Автор: Elfet 20.5.2010, 11:36
Цитата(jonie @  20.5.2010,  01:45 Найти цитируемый пост)
IBM Rational PurifyPlus 

Блин,  smile  поддерживаются только следующие:
Цитата
Microsoft Visual Studio® 2008
Microsoft Visual Studio 2005
Microsoft Visual Studio .NET® 2003
Microsoft Visual Studio .NET
Microsoft Visual Studio 6.0


А есть ли какие-нибудь с поддержкой minGW? И желательно бесплатные? 

Автор: azesmcar 20.5.2010, 11:41
Цитата(Elfet @  20.5.2010,  11:36 Найти цитируемый пост)
А есть ли какие-нибудь с поддержкой minGW? И желательно бесплатные?  

jonie целый список привел
http://en.wikipedia.org/wiki/Memory_debugger

под линукс valgrind.

Автор: Elfet 20.5.2010, 12:20
azesmcar, да я все просмторет, там в основном под linux в у меня windows.

Автор: jonie 20.5.2010, 22:19
Цитата(Elfet @ 20.5.2010,  11:36)
Цитата(jonie @  20.5.2010,  01:45 Найти цитируемый пост)
IBM Rational PurifyPlus 

Блин,  smile  поддерживаются только следующие:
Цитата
Microsoft Visual Studio® 2008
Microsoft Visual Studio 2005
Microsoft Visual Studio .NET® 2003
Microsoft Visual Studio .NET
Microsoft Visual Studio 6.0


А есть ли какие-нибудь с поддержкой minGW? И желательно бесплатные?

Цитата

Debugging

    * Where do I find a memory leak detector?
          o Wu Yongwei's memory leak detector can be found here : http://wyw.dcweb.cn/leakage.htm
          o More links may be found here : http://betterlogic.com/roger/?p=1140


© http://www.mingw.org/wiki/FAQ

ну и гугл по фразе "mingw memory debugger" найдет чего-нибудь..

Автор: kamre 20.5.2010, 23:50
Цитата(Elfet @ 19.5.2010,  21:26)
дебагер тоже из коробки SDK.

Лучше собрать под MSVC и там с отладчиком запускать, т.к. в MinGW отладчик тот еще отстой.

Автор: jonie 21.5.2010, 08:57
kamre, в mingw нет отладчика... есть dbg, но это не часть mingw вроде как...

Автор: kamre 21.5.2010, 09:52
Цитата(jonie @ 21.5.2010,  08:57)
kamre, в mingw нет отладчика... 

Разумеется имелся ввиду MinGW GDB Debugger, это можно считать частью MinGW toolchain. Так вот этот отладчик и его интеграция куда-либо (QtCreator/Eclipse/NetBeans) хуже работает, чем встроенный в MSVC отладчик. Да и нормальные тулзы вроде IBM Rational Purify поддерживают только MSVC, причем есть даже интеграция в студию и работать весьма удобно (по сравнению с valgrind под линуксом).

Автор: Elfet 21.5.2010, 13:29
Цитата(kamre @  21.5.2010,  00:50 Найти цитируемый пост)
Лучше собрать под MSVC и там с отладчиком запускать, т.к. в MinGW отладчик тот еще отстой. 

Мы всё под MinGW делали, под MSVC наверное сложно будет собрать. 

Автор: azesmcar 21.5.2010, 13:40
Elfet

У тебя очевидная проблема, нужен дебаггер, чтобы понять где находится источник проблемы..решений море, либо ставь нормальный дебаггер, используй среду, где есть что-то подобное. В твоем случае наверное проще всего запустить под линукс valgrind, он бесплатный и с компиляцией проблем не будет.

еще можешь повсюду поставить вывод логов, по логам поймешь где примерно вылетает, а там интуитивно найдешь.

Автор: kamre 21.5.2010, 14:03
Цитата(Elfet @ 21.5.2010,  13:29)
Мы всё под MinGW делали, под MSVC наверное сложно будет собрать.

Сборка через что организованна? Если через qmake или CMake, то там все легко на MSVC можно собрать и отлаживать. Другие системы сборки при разработке с Qt, мне кажется, использовать не рационально.

Автор: Elfet 21.5.2010, 17:53
kamre, через qmake.  Что я знаю так это то что нужно пересобирать Qt отдельно под MSVC + нужно ещё и буст и другие библиотеки пересобирать.  

Автор: kamre 21.5.2010, 18:27
Цитата(Elfet @ 21.5.2010,  17:53)
нужно пересобирать Qt отдельно под MSVC + нужно ещё и буст и другие библиотеки пересобирать.

Qt, собранную под MSVC 2008, уже давно можно скачать с оффсайта. Boost проще пересобрать самому, хотя вроде и уже собранные под MSVC есть: http://www.boostpro.com/download.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)