0 / 0 / 0
Регистрация: 10.10.2012
Сообщений: 9
1

0xC0000005 или что делать дальше

10.10.2012, 11:31. Показов 2760. Ответов 20
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Достался по наследству СТАРЫЙ код, смесь С и С++, перенес его на VS 2008.
При запуске в режиме отладки возникает собственно ошибка, указанная в теме.

Cal stack:
ntdll.dll!776be3be()
[Frames below may be incorrect and/or missing, no symbols loaded for ntdll.dll]
ntdll.dll!776be023()
msvcrt.dll!754a98cd()
> ENGINE.exe!_heap_alloc_dbg_impl(unsigned int nSize=52844184, int nBlockUse=0, const char * szFileName=0x00000000, int nLine=2130567168, int * errno_tmp=0x0018fb78) Line 497 + 0xc bytes C++
ENGINE.exe!std::_DebugHeapDelete<std::locale>(std::locale * _Ptr=0x03265698) Line 61 + 0x9 bytes C++
ENGINE.exe!std::basic_streambuf<char,std::char_traits<char> >::~basic_streambuf<char,std::char_traits<char> >() Line 43 + 0xc bytes C++
ENGINE.exe!std::basic_filebuf<char,std::char_traits<char> >::~basic_filebuf<char,std::char_traits<char> >() Line 120 + 0xf bytes C++
ENGINE.exe!std::basic_fstream<char,std::char_traits<char> >::~basic_fstream<char,std::char_traits<char> >() Line 901 + 0xb bytes C++
ENGINE.exe!std::basic_fstream<char,std::char_traits<char> >::`vbase destructor'() + 0x17 bytes C++
ENGINE.exe!READ_VANES(char * NAME_FILE=0x010506ae, VANE * & vane=0x016b1928, VAR & var={...}) Line 72 + 0x15 bytes C++
ENGINE.exe!COMPRESSOR::SET_VAR() Line 168 + 0x20 bytes C++
ENGINE.exe!COMPRES(COMPRESSOR & PC={...}) Line 31 C++
ENGINE.exe!main() Line 67 + 0x1b bytes C++
ENGINE.exe!__tmainCRTStartup() Line 266 + 0x19 bytes C
ENGINE.exe!mainCRTStartup() Line 182 C
kernel32.dll!7556339a()
ntdll.dll!776c9ef2()
ntdll.dll!776c9ec5()

Код функции на выходе, которой код падает:
C++
1
2
3
4
5
 int READ_VANES(char *NAME_FILE , VANE *&vane , VAR  &var)
{
    std::fstream datafile;
    return 1;
}
В коде убрал все комментарии, т.е. как я понял при инициализации переменной datafile, создается
буфер или даже два судя по стеку вызовов, которые перед выходом из функции подчищаются, но не правильно.

Вопрос собственно, что сделать в данном случае?
Может использовать чистый Си?

Заранее благодарен за помощь.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.10.2012, 11:31
Ответы с готовыми решениями:

Что дальше делать?
Я тут недавно начал изучать с++ и изучил основы языка и немного порешал легких задач. Не подскажите...

И что делать дальше?Поделитесь опытом
Итак вопрос немного необычного характера. Дела обстоят так: 1) В университете нам вообще не...

что делать дальше? Класс Книга.
Помогите разобраться с тем, что делать дальше... Создать класс КНИГА с атрибутами: название,...

Прошел книгу Шилтда, что делать дальше?
Прошел книгу Шилтда, C++: Begginers Guide. Могу ли я перейти быстро на С# и писать на unity? Стоит...

20
9 / 9 / 5
Регистрация: 05.02.2012
Сообщений: 147
Записей в блоге: 1
10.10.2012, 12:04 2
Выложите весь код, так ничего нельзя сказать.

P.S.

datafile - это вовсе никакая не переменная, а объект класса fstream.
0
0 / 0 / 0
Регистрация: 10.10.2012
Сообщений: 9
10.10.2012, 12:52  [ТС] 3
Весь код выложить не получится, ибо его много, могу выложить ту часть, откуда идет вызов функции.
C++
1
2
3
4
5
6
7
8
9
10
11
if (HULLO ( "=" ))
{
   cout<<"READ_VANES=>>" ;     
   INOUT.put_word( var.title.READ_VANES ) ;
   goto SWITCH;
}
else 
{
    READ_VANES(var.title.READ_VANES , vane ,var) ; 
    goto SWITCH; 
 }
и дальше практически тоже самое 500 строк с условными операторами и goto.
функция HULLO:
C++
1
2
3
4
5
int HULLO(const char* object)
{
    extern inoutword IO;
    return (!_stricmp(object,IO.testword))? 1 : 0;
}
Этого будет достаточно?
0
DU
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
10.10.2012, 15:00 4
т.е. сама функция именно такая и в ней больше нет никакого
другого кода?
C++
1
2
3
4
5
6
7
8
9
10
int READ_VANES(char *NAME_FILE , VANE *&vane , VAR  &var)
{
    std::fstream datafile;
 
   ///////////////////////////////
   // вот тут что-нибудь еще есть?
   ///////////////////////////////
 
    return 1;
}
0
0 / 0 / 0
Регистрация: 10.10.2012
Сообщений: 9
10.10.2012, 15:39  [ТС] 5
Нет, я уже писал об этом, там был код, который я закомментировал, и он не влияет на ошибку.
Если убрать std::fstream datafile; из кода, то работает как ни странно.
0
DU
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
10.10.2012, 15:41 6
тестовый консольный проектик сделайте, напишите в нем такую функцию и посмотрите, так же будет себя вести? вроде код корректный и такого быть не должно.
0
Twilight Parasite
154 / 150 / 7
Регистрация: 21.07.2011
Сообщений: 908
10.10.2012, 15:59 7
Мелкософтовское отродье никогда не будет работать норм.
0
0 / 0 / 0
Регистрация: 10.10.2012
Сообщений: 9
10.10.2012, 17:27  [ТС] 8
Может ошибка возникать из-за сторонней либы?
В проекте есть две фортрановские либы, одна очень старая (grafor.lib grafor.dll), другая - нет, собрал на VS 2008 + PGI Fortran. Новая либа тянет за собой еще несколько фортрановских DLL.

И тестовая программа работает, а эта нет.
0
9 / 9 / 5
Регистрация: 05.02.2012
Сообщений: 147
Записей в блоге: 1
10.10.2012, 18:41 9
Попробуйте прописать
C++
1
2
#include <fstream>
#include <ios.h>
0
Twilight Parasite
154 / 150 / 7
Регистрация: 21.07.2011
Сообщений: 908
10.10.2012, 19:41 10
BFB, попробуй gcc
0
0 / 0 / 0
Регистрация: 10.10.2012
Сообщений: 9
10.10.2012, 20:39  [ТС] 11
Цитата Сообщение от algoritm256 Посмотреть сообщение
Попробуйте прописать
C++
1
2
#include <fstream>
#include <ios.h>
не помогло.
0
9 / 9 / 5
Регистрация: 05.02.2012
Сообщений: 147
Записей в блоге: 1
10.10.2012, 22:01 12
по-возможности залейте на какой-нибудь файлообменник код
0
0 / 0 / 0
Регистрация: 10.10.2012
Сообщений: 9
11.10.2012, 18:55  [ТС] 13
Залить весь код к сожалению не могу, разве что предварительно уволившись.
Пробовал перенести проект в Eclipse CDT и прикрутить MinGW, пока не вышло.
Поможет ли перенос проекта в студию версией повыше?
0
5231 / 3204 / 362
Регистрация: 12.12.2009
Сообщений: 8,113
Записей в блоге: 2
11.10.2012, 21:07 14
Цитата Сообщение от BFB Посмотреть сообщение
Код функции на выходе, которой код падает:

C++
1
2
3
4
5
int READ_VANES(char *NAME_FILE , VANE *&vane , VAR *&var)
{
    std::fstream datafile;
    return 1;
}
я так понял, тут многое убрано. А именно в таком виде падение повторяется?
0
0 / 0 / 0
Регистрация: 10.10.2012
Сообщений: 9
12.10.2012, 00:27  [ТС] 15
Цитата Сообщение от Kastaneda Посмотреть сообщение
я так понял, тут многое убрано. А именно в таком виде падение повторяется?
Самое интересное, да - падание повторяется строго на выходе из функции.
Собирал тестовую программу из этой функции с учетом всех переменных, правда данных не было, так же падало. В исходном коде занулял все передаваемые данные, такой же результат, т.е. падение на выходе из функции.
0
Twilight Parasite
154 / 150 / 7
Регистрация: 21.07.2011
Сообщений: 908
12.10.2012, 00:37 16
BFB, Может стоит закрывать файл перед выходом из функции?
0
9 / 9 / 5
Регистрация: 05.02.2012
Сообщений: 147
Записей в блоге: 1
12.10.2012, 06:21 17
Попробуйте перед return поставить datafile.close();
0
0 / 0 / 0
Регистрация: 10.10.2012
Сообщений: 9
12.10.2012, 12:14  [ТС] 18
Не помогло, использование datafile.close(); так же, как и использование datafile.rdbuf()->close();
0
5231 / 3204 / 362
Регистрация: 12.12.2009
Сообщений: 8,113
Записей в блоге: 2
12.10.2012, 12:37 19
Могу предложить fastfix (временный костыль) просто, чтобы работало. Потом время будет - разберешся.
C++
1
2
3
4
5
int READ_VANES(char *NAME_FILE , VANE *&vane , VAR *&var)
{
    std::fstream *datafile = new std::fstream();
    return 1;
}
будет небольшой memleak, но зато будет работать (если дело в деструкторе).
0
0 / 0 / 0
Регистрация: 10.10.2012
Сообщений: 9
12.10.2012, 15:06  [ТС] 20
Цитата Сообщение от Kastaneda Посмотреть сообщение
Могу предложить fastfix (временный костыль) просто, чтобы работало. Потом время будет - разберешся.
C++
1
2
3
4
5
int READ_VANES(char *NAME_FILE , VANE *&vane , VAR *&var)
{
    std::fstream *datafile = new std::fstream();
    return 1;
}
будет небольшой memleak, но зато будет работать (если дело в деструкторе).
Конечно это работает, спасибо. Но как убрать эти подвисшие объекты?

По мне так проще отказаться от С++ решения ввода-вывода.

И еще есть мысль, что, возможно, pgmalloc.dll каким-то образом заменяет Сишные функции по работе с памятью или еще как-то.

Добавлено через 13 минут
Цитата Сообщение от BFB Посмотреть сообщение
И еще есть мысль, что, возможно, pgmalloc.dll каким-то образом заменяет Сишные функции по работе с памятью или еще как-то.
Ошибка, pgmalloc.dll не при чем.

Добавлено через 12 минут
Убрал все PGI'ные либы, которые были за ненадобностью запиханы в проект, и заработало.
В чем ошибка была, я так и не понял.
0
12.10.2012, 15:06
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.10.2012, 15:06
Помогаю со студенческими работами здесь

Нарисовать ромб через цикл,почти сделал,не могу понять что делать дальше
#include &lt;iostream&gt; #include &lt;math.h&gt; #include &lt;conio.h&gt; using namespace std; int main() { ...

можно ли вернуть все как было или что делать дальше
здравствуйте специалисты!! подскажите пожалуйста неопытному пользователю,что делать! имеется ноут...

Что делать дальше?
Привет всем! Есть газета Нуран Контршанс. Ее начал выпускать мой знакомый со своими...

Что делать дальше?
Вот поставил я apache+php. Проверил их работу по файлу info.php (вся информация про php). А что...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru