Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 23, средняя оценка - 4.83
Ko
-65 / 5 / 0
Регистрация: 23.12.2011
Сообщений: 246
#1

Падает то не падает) APPCRASH StackHash PCH FROM ntdll - C++

29.06.2013, 16:35. Просмотров 3178. Ответов 22
Метки нет (Все метки)

При работе приложения вызывается метод класса и с вероятностью 50/50 программа доживает до конца своей работы
при падении выдаётся вот такое

Сигнатура проблемы:
Имя события проблемы: APPCRASH
Имя приложения: XXX.exe
Версия приложения: 0.0.0.0
Отметка времени приложения: 51cea425
Имя модуля с ошибкой: StackHash_69fe
Версия модуля с ошибкой: 6.2.9200.16384
Отметка времени модуля с ошибкой: 5010acd2
Код исключения: c0000374
Смещение исключения: PCH_78_FROM_ntdll+0x0000000000002BEA
Версия ОС: 6.2.9200.2.0.0.256.48
Код языка: 1049
Дополнительные сведения 1: 69fe
Дополнительные сведения 2: 69fe067f15cbd711de9a06a551d3dadd
Дополнительные сведения 3: f975
Дополнительные сведения 4: f975cbc478b921e800650d05b62c8dd7

Ознакомьтесь с заявлением о конфиденциальности в Интернете:
http://go.microsoft.com/fwlink/?linkid=190175

Памяти приложение жрет в районе 1-3 гигов

вот кусок кода где падает
смысл этого метода это добавление в картатеку определенного номера
по ходу дела когда размер массива "Fast_Cross_Size_Max" превышает то выделяется больше кусок памяти
начальное значение Fast_Cross_Size_Max = 5 у Fast_Cross_Size = 0

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
void Element::Add_New_Cross_Сompatible( unsigned int &_Add_Cross_ )
{
    if ( Fast_Cross_Size < Fast_Cross_Size_Max-1 )
    {
        Fast_Cross_Сompatible[Fast_Cross_Size] = _Add_Cross_;
        Fast_Cross_Size++;
    }
    else
    {
        Fast_Cross_Size_Max *= 2;
        unsigned int *temp_fast = new unsigned int[Fast_Cross_Size_Max];
        for (int i = 0; i < Fast_Cross_Size; i++)
        {
            temp_fast[i] = Fast_Cross_Сompatible[i];
        }
        delete[]Fast_Cross_Сompatible; <= падает тут когда я вытаюсь удалить эту памяти. почему я не могу понять
        Fast_Cross_Сompatible = new unsigned int[Fast_Cross_Size_Max];
        for (int i = 0; i < Fast_Cross_Size; i++)
        {
            Fast_Cross_Сompatible[i] = temp_fast[i];
        }
        Fast_Cross_Сompatible[Fast_Cross_Size] = _Add_Cross_;
        Fast_Cross_Size++;
        delete[]temp_fast;
    }
}
в компе 20 гигов памяти, память уже 10 раз проверял error не обнаружено, программа неделями работала пока я не добавил вот этот кусок кода, пожалуйста выскажитесь по этому поводу что думаете
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
30.06.2013, 15:36     Падает то не падает) APPCRASH StackHash PCH FROM ntdll #2
Почему бы не использовать стандартные контейнеры?
Ko
-65 / 5 / 0
Регистрация: 23.12.2011
Сообщений: 246
01.07.2013, 04:04  [ТС]     Падает то не падает) APPCRASH StackHash PCH FROM ntdll #3
скорость в 4-6 раз падает
Croessmah
Модератор
Эксперт CЭксперт С++
13052 / 7315 / 814
Регистрация: 27.09.2012
Сообщений: 18,052
Записей в блоге: 3
Завершенные тесты: 1
01.07.2013, 04:07     Падает то не падает) APPCRASH StackHash PCH FROM ntdll #4
Скорее всего где-то попортили память, пытаясь записать не в свою память
Ko
-65 / 5 / 0
Регистрация: 23.12.2011
Сообщений: 246
01.07.2013, 06:32  [ТС]     Падает то не падает) APPCRASH StackHash PCH FROM ntdll #5
Я решил проверсти тесты и кое какие манипуляции скорей всего идеально будет всё таки воспозоваться стандарными средствами но пожертвовать скоростью. Если память портиться то почему из 10 раз 5 раз всё получается а 5 не получается софтине дойти до конца.
Croessmah
Модератор
Эксперт CЭксперт С++
13052 / 7315 / 814
Регистрация: 27.09.2012
Сообщений: 18,052
Записей в блоге: 3
Завершенные тесты: 1
01.07.2013, 06:35     Падает то не падает) APPCRASH StackHash PCH FROM ntdll #6
Цитата Сообщение от Ko Посмотреть сообщение
почему из 10 раз 5 раз всё получается
При ошибках в работе с памятью результат зависит от фазы луны и от великого рандома
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
01.07.2013, 07:26     Падает то не падает) APPCRASH StackHash PCH FROM ntdll #7
К проблеме отношения не имеет, но зачем:
C++
1
2
3
4
5
6
7
...
Fast_Cross_Сompatible = new unsigned int[Fast_Cross_Size_Max];
for (int i = 0; i < Fast_Cross_Size; i++)
{
       Fast_Cross_Сompatible[i] = temp_fast[i];
}
...
если можно просто:
C++
1
Fast_Cross_Сompatible = temp_fast;
Ko
-65 / 5 / 0
Регистрация: 23.12.2011
Сообщений: 246
01.07.2013, 07:37  [ТС]     Падает то не падает) APPCRASH StackHash PCH FROM ntdll #8
Луну исключаем)

Добавлено через 54 секунды
Вы хотите сказать что машина сама скопирует Fast_Cross_Сompatible = temp_fast; все значения ?

Добавлено через 1 минуту
я бы конечно стал бы использовать Stl вектор, но хочется очень понять почему идут завесы
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
01.07.2013, 07:39     Падает то не падает) APPCRASH StackHash PCH FROM ntdll #9
Цитата Сообщение от Ko Посмотреть сообщение
Вы хотите сказать что машина сама скопирует Fast_Cross_Сompatible = temp_fast; все значения ?
При чём здесь значения? Значения уже скопированы:
C++
1
2
3
4
5
unsigned int *temp_fast = new unsigned int[Fast_Cross_Size_Max];
for (int i = 0; i < Fast_Cross_Size; i++)
{
       temp_fast[i] = Fast_Cross_Сompatible[i];
}
Нужно только указатель на эту память заменить.
C++
1
Fast_Cross_Сompatible = temp_fast;
Теперь на эту память указывает Fast_Cross_Сompatible.
Ko
-65 / 5 / 0
Регистрация: 23.12.2011
Сообщений: 246
01.07.2013, 07:41  [ТС]     Падает то не падает) APPCRASH StackHash PCH FROM ntdll #10
Ребята спасибо что Вы помогаете)
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
01.07.2013, 07:42     Падает то не падает) APPCRASH StackHash PCH FROM ntdll #11
И естественно, delete[]temp_fast; после этого уже не делать.
Ko
-65 / 5 / 0
Регистрация: 23.12.2011
Сообщений: 246
01.07.2013, 07:45  [ТС]     Падает то не падает) APPCRASH StackHash PCH FROM ntdll #12
а ну я это делал именно так в самом начале когда начались завесы, потом переделал) сейчас сделал файл 6 гигов его подгружаю ни когда до конца программа не доходит, это положительно в поиске истины

Добавлено через 1 минуту
сейчас подифицируем и поглядим, жаль что в разных местах падает программа так было бы проще но менее интересно)

Добавлено через 1 минуту
а может стэка не хватать?
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
01.07.2013, 07:48     Падает то не падает) APPCRASH StackHash PCH FROM ntdll #13
Цитата Сообщение от Ko Посмотреть сообщение
а ну я это делал именно так в самом начале когда начались завесы, потом переделал)
А смысл было переделывать? То же самое, только дополнительное выделение, копирование и освобождение.

Добавлено через 42 секунды
Цитата Сообщение от Ko Посмотреть сообщение
а может стэка не хватать?
А где здсь стек? В куче память выделяется, но там тоже есть ограничение.
Ko
-65 / 5 / 0
Регистрация: 23.12.2011
Сообщений: 246
01.07.2013, 08:24  [ТС]     Падает то не падает) APPCRASH StackHash PCH FROM ntdll #14
Хотел сделать тестовый блок как в программе, сделал, пару раз прогнал, прога не зависает тестовая, это уже интересно
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.07.2013, 09:04     Падает то не падает) APPCRASH StackHash PCH FROM ntdll
Еще ссылки по теме:
Приложение падает при удалении синглтона C++
Неожиданно падает программа с библиотекой ffmpeg C++
C++ Программа падает при чтении из файлов
При объявлении структуры глобальной программа падает C++
C++ Программа падает при вызове vector::begin()

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

Или воспользуйтесь поиском по форуму:
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
01.07.2013, 09:04     Падает то не падает) APPCRASH StackHash PCH FROM ntdll #15
Посмотреть сколько ОС позволяет памяти выделить для программы. Выделять вектор и смотреть при каком размере будет исключение. У меня, при 4Гб памяти, не больше этого (1.2 Гб):
C++
1
std::vector <int> vec(330000000);
Yandex
Объявления
01.07.2013, 09:04     Падает то не падает) APPCRASH StackHash PCH FROM ntdll
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru