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

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

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 23, средняя оценка - 4.83
Ko
 Аватар для Ko
-65 / 5 / 0
Регистрация: 23.12.2011
Сообщений: 246
29.06.2013, 16:35     Падает то не падает) APPCRASH StackHash PCH FROM ntdll #1
При работе приложения вызывается метод класса и с вероятностью 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 не обнаружено, программа неделями работала пока я не добавил вот этот кусок кода, пожалуйста выскажитесь по этому поводу что думаете
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.06.2013, 16:35     Падает то не падает) APPCRASH StackHash PCH FROM ntdll
Посмотрите здесь:

C++ Приложение падает на другом компе
C++ std::random_device падает приложение
C++ Программа падает при чтении из файлов
C++ Падает программа
C++ Почему падает программа?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
30.06.2013, 15:36     Падает то не падает) APPCRASH StackHash PCH FROM ntdll #2
Почему бы не использовать стандартные контейнеры?
Ko
 Аватар для Ko
-65 / 5 / 0
Регистрация: 23.12.2011
Сообщений: 246
01.07.2013, 04:04  [ТС]     Падает то не падает) APPCRASH StackHash PCH FROM ntdll #3
скорость в 4-6 раз падает
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,919
Записей в блоге: 2
Завершенные тесты: 1
01.07.2013, 04:07     Падает то не падает) APPCRASH StackHash PCH FROM ntdll #4
Скорее всего где-то попортили память, пытаясь записать не в свою память
Ko
 Аватар для Ko
-65 / 5 / 0
Регистрация: 23.12.2011
Сообщений: 246
01.07.2013, 06:32  [ТС]     Падает то не падает) APPCRASH StackHash PCH FROM ntdll #5
Я решил проверсти тесты и кое какие манипуляции скорей всего идеально будет всё таки воспозоваться стандарными средствами но пожертвовать скоростью. Если память портиться то почему из 10 раз 5 раз всё получается а 5 не получается софтине дойти до конца.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,919
Записей в блоге: 2
Завершенные тесты: 1
01.07.2013, 06:35     Падает то не падает) APPCRASH StackHash PCH FROM ntdll #6
Цитата Сообщение от Ko Посмотреть сообщение
почему из 10 раз 5 раз всё получается
При ошибках в работе с памятью результат зависит от фазы луны и от великого рандома
alsav22
5282 / 4801 / 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
 Аватар для 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
5282 / 4801 / 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
 Аватар для Ko
-65 / 5 / 0
Регистрация: 23.12.2011
Сообщений: 246
01.07.2013, 07:41  [ТС]     Падает то не падает) APPCRASH StackHash PCH FROM ntdll #10
Ребята спасибо что Вы помогаете)
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
01.07.2013, 07:42     Падает то не падает) APPCRASH StackHash PCH FROM ntdll #11
И естественно, delete[]temp_fast; после этого уже не делать.
Ko
 Аватар для Ko
-65 / 5 / 0
Регистрация: 23.12.2011
Сообщений: 246
01.07.2013, 07:45  [ТС]     Падает то не падает) APPCRASH StackHash PCH FROM ntdll #12
а ну я это делал именно так в самом начале когда начались завесы, потом переделал) сейчас сделал файл 6 гигов его подгружаю ни когда до конца программа не доходит, это положительно в поиске истины

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

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

Добавлено через 42 секунды
Цитата Сообщение от Ko Посмотреть сообщение
а может стэка не хватать?
А где здсь стек? В куче память выделяется, но там тоже есть ограничение.
Ko
 Аватар для Ko
-65 / 5 / 0
Регистрация: 23.12.2011
Сообщений: 246
01.07.2013, 08:24  [ТС]     Падает то не падает) APPCRASH StackHash PCH FROM ntdll #14
Хотел сделать тестовый блок как в программе, сделал, пару раз прогнал, прога не зависает тестовая, это уже интересно
alsav22
5282 / 4801 / 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);
Ko
 Аватар для Ko
-65 / 5 / 0
Регистрация: 23.12.2011
Сообщений: 246
01.07.2013, 09:27  [ТС]     Падает то не падает) APPCRASH StackHash PCH FROM ntdll #16
16-20 гигов программа может поглотить при работе, вектор это будет крайний случай потому что это очень медленно, 31 секунда вектора против 19 секунд без вектора, меньше не не удаётся согратить время вектора

Добавлено через 3 минуты
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void Element_test::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 ( unsigned int i = 0; i < Fast_Cross_Size; i++)
        {
            temp_fast[i] = Fast_Cross_Сompatible[i];
        }
        delete[]Fast_Cross_Сompatible;
        Fast_Cross_Сompatible = temp_fast;
        Fast_Cross_Сompatible[Fast_Cross_Size] = _Add_Cross_;
        Fast_Cross_Size++;
    }
}

при таком коде думаешь не будет утечки памяти к temp_fast ведь выделяется там указатель, это пусть 4 байта или сколько там он выделяет то это если сделать 1 миллиард раз будет 4 миллиарда байтов заблокировано( хотя я тесты делал вроде нет утечки, но это односложный тест был
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
01.07.2013, 10:07     Падает то не падает) APPCRASH StackHash PCH FROM ntdll #17
Цитата Сообщение от Ko Посмотреть сообщение
31 секунда вектора против 19 секунд без вектора
Очень странно. Может Вы с отладочной инфой собираете?
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 50
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
01.07.2013, 10:27     Падает то не падает) APPCRASH StackHash PCH FROM ntdll #18
Можно сделать чуть проще:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void Element_test::Add_New_Cross_Сompatible( unsigned int _Add_Cross_ )
{
   if ( Fast_Cross_Size >= Fast_Cross_Size_Max ) {
      Fast_Cross_Size_Max *= 2;
      
      unsigned int *tmp  = new unsigned int [ Fast_Cross_Size_Max ];
      
      std::memcpy( tmp, Fast_Cross_Сompatible, Fast_Cross_Size * sizeof( unsigned int ));
      
      delete [] Fast_Cross_Сompatible;
      
      Fast_Cross_Сompatible = tmp;
   }
 
   Fast_Cross_Сompatible[ Fast_Cross_Size++ ] = _Add_Cross_;
}
Но проблема вряд ли в этой функции. Какой тип имеют переменные размеров? Если Вы говорите, что программа использует больше 4 гб памяти, то лучше использовать size_t.

Добавлено через 6 минут
Tulosba, мне кажется, что просто не используется push_back().
Ko, с вектором Вам бы не нужно было хранить максимальный и текущий размер массива. А данная функция бы свелась к простому:
C++
1
2
3
4
void Element_test::Add_New_Cross_Сompatible( unsigned int _Add_Cross_ )
{
   vec.push_back( _Add_Cross_ );
}
Ko
 Аватар для Ko
-65 / 5 / 0
Регистрация: 23.12.2011
Сообщений: 246
01.07.2013, 10:51  [ТС]     Падает то не падает) APPCRASH StackHash PCH FROM ntdll #19
для кода возьму строчку
std::memcpy( tmp, Fast_Cross_Сompatible, Fast_Cross_Size * sizeof( unsigned int ));
вектор и всё что с ним связано это всё понятно, но это последний вариант и он очень медленный для программ которые работают недели или месяцы не допустим проигрыш почти в два раза по времени если использовать
vec.push_back( _Add_Cross_ ); время с 19 секунд превращается в 78 секунд, если вектор в начале раздвигать как надо то можно сделать чтоб время было районе 31 секунду и это использовать компилятор от intel

Добавлено через 37 секунд
я думаю что в коде как раз всё нормально, может в настройках компилятора что не то... буду пробывать, всем спасибо

Добавлено через 1 минуту
диапазон все чисел от 0 до 160000.. это предел так что unsigned int за глаза
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.07.2013, 11:18     Падает то не падает) APPCRASH StackHash PCH FROM ntdll
Еще ссылки по теме:

C++ Падает программа при использовании DLL
Программа падает без printf C++
Приложение падает при удалении синглтона C++

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

Или воспользуйтесь поиском по форуму:
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 50
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
01.07.2013, 11:18     Падает то не падает) APPCRASH StackHash PCH FROM ntdll #20
Ko, даже не поленился, прогнал небольшой тест. Вектор оказался быстрее примерно в 1.3 раза. Компилятор MinGW, -O2.
ADD: Но в 2010 и 2005 студиях действительно есть небольшое падение скорости.

Добавлено через 1 минуту
Цитата Сообщение от Ko Посмотреть сообщение
диапазон все чисел от 0 до 160000.. это предел так что unsigned int за глаза
Это предел хранимых значений. Значения уникальны? То есть их количество не может быть больше 160000 в массиве?
Yandex
Объявления
01.07.2013, 11:18     Падает то не падает) APPCRASH StackHash PCH FROM ntdll
Ответ Создать тему
Опции темы

Текущее время: 05:33. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru