Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

29.06.2013, 16:35. Просмотров 3403. Ответов 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 не обнаружено, программа неделями работала пока я не добавил вот этот кусок кода, пожалуйста выскажитесь по этому поводу что думаете
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.06.2013, 16:35
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Падает то не падает) APPCRASH StackHash PCH FROM ntdll (C++):

Падает программа - C++
ошибки нет. предупреждения такого вида: warning C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead....

Почему падает программа? - C++
Почему падает программа? Компилируется без ошибок, но при запуске аварийное завершение работы. #include &lt;iostream&gt; #include &lt;stdlib.h&gt; ...

Падает программа с opencv - C++
Код #include &lt;cv.h&gt; #include &lt;highgui.h&gt; int main() { // задаём высоту и ширину картинки int height = 620; ...

std::random_device падает приложение - C++
win7, gcc 4.4.7 пишет, ошибка &quot;std::runtime_error&quot; чего ему надо? Добавлено через 14 часов 17 минут вверх

Приложение падает на другом компе - C++
ОС Ubuntu-64 linux. Написал, отладил и скомпилировал приложение на домашнем ноутбуке. Приношу на работу (там тоже Ubuntu-64) готовый...

Программа падает без printf - C++
Пишу простую программу, которая в цикле запускает другую, меняя один из аргументов от нуля до 700. Два одинаковых варианта, с printf...

22
Ko
-65 / 5 / 0
Регистрация: 23.12.2011
Сообщений: 247
01.07.2013, 09:27  [ТС] #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 миллиарда байтов заблокировано( хотя я тесты делал вроде нет утечки, но это односложный тест был
0
Tulosba
:)
Эксперт С++
4397 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
01.07.2013, 10:07 #17
Цитата Сообщение от Ko Посмотреть сообщение
31 секунда вектора против 19 секунд без вектора
Очень странно. Может Вы с отладочной инфой собираете?
0
Toshkarik
1143 / 860 / 51
Регистрация: 03.08.2011
Сообщений: 2,390
Завершенные тесты: 1
01.07.2013, 10:27 #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_ );
}
1
Ko
-65 / 5 / 0
Регистрация: 23.12.2011
Сообщений: 247
01.07.2013, 10:51  [ТС] #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 за глаза
0
Toshkarik
1143 / 860 / 51
Регистрация: 03.08.2011
Сообщений: 2,390
Завершенные тесты: 1
01.07.2013, 11:18 #20
Ko, даже не поленился, прогнал небольшой тест. Вектор оказался быстрее примерно в 1.3 раза. Компилятор MinGW, -O2.
ADD: Но в 2010 и 2005 студиях действительно есть небольшое падение скорости.

Добавлено через 1 минуту
Цитата Сообщение от Ko Посмотреть сообщение
диапазон все чисел от 0 до 160000.. это предел так что unsigned int за глаза
Это предел хранимых значений. Значения уникальны? То есть их количество не может быть больше 160000 в массиве?
0
Ko
-65 / 5 / 0
Регистрация: 23.12.2011
Сообщений: 247
01.07.2013, 14:25  [ТС] #21
да подаётся строчка там уникальные значения, я сейчас проверяю всё что только можно

Добавлено через 1 минуту
я работаю с visual studio 2012 при стандартном компиляторе падение на 11% если спользовать intel компилятор то падает скорость на 40% да и я сейчас пишу для обычного процессора дальше надо делать под xeon phi там с векторами не попрыгаешь)

Добавлено через 3 минуты
я всё таки думаю что ошибка связана с файлом ntdll

Добавлено через 38 секунд
максимум в массиве я наблюдаю где то предел до 60000

Добавлено через 1 минуту
точнее компилятор intel очень быстро работает и если использовать любую другую схему то падение от 11% до 40

Добавлено через 2 часа 42 минуты
походу дело всё в векторе в который я упакавал свои элементы
0
alsav22
5426 / 4821 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
01.07.2013, 16:17 #22
Цитата Сообщение от Ko Посмотреть сообщение
при таком коде думаешь не будет утечки памяти к temp_fast ведь выделяется там указатель, это пусть 4 байта или сколько там он выделяет то это если сделать 1 миллиард раз будет 4 миллиарда байтов заблокировано( хотя я тесты делал вроде нет утечки, но это односложный тест был
Указатель локальный, память под самим указателем сободна при выходе из функции (что в первом коде, что в этом).
1
Ko
-65 / 5 / 0
Регистрация: 23.12.2011
Сообщений: 247
02.07.2013, 20:47  [ТС] #23
Цитата Сообщение от alsav22 Посмотреть сообщение
Указатель локальный, память под самим указателем сободна при выходе из функции (что в первом коде, что в этом).
да вот спасибо Вы мне ответили на мой вопрос))) теперь всё супер, саму схему сделал, она оказалась в работе на 2-3 раза медленней следовательно в баге разбираться нет смысла, просто удалю эту версию.
0
02.07.2013, 20:47
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.07.2013, 20:47
Привет! Вот еще темы с ответами:

Падает программа при использовании DLL - C++
Раньше писал DLL для одного приложения, теперь мне понадобилось его использовать в другом. Подключил lib, хедер и саму DLL положил рядом с...

Приложение падает при удалении синглтона - C++
Всем привет. Понадобилось мне использовать паттерн Singleton, реализовал я его так. UIManager* UIManager::GetInstance(){ ...

Неожиданно падает программа с библиотекой ffmpeg - C++
Простите, не знал, в какой раздел сунуть и сунил сюда, надеюсь, перенесут по адресу. Суть проблемы: Передается в функцию SDP запрос в...

Программа падает при чтении из файлов - C++
В C++ слова читаются из двух файлов.выбивает ошибку.Что можно сделать?


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

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

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