Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
0 / 0 / 0
Регистрация: 23.10.2018
Сообщений: 123

Почему в конце падает программа ?

08.05.2020, 11:53. Показов 1322. Ответов 9

Студворк — интернет-сервис помощи студентам
Добрый день!
В конце крешится программа,после press any key..
И выкидывает страницу с No Symbols loaded c wntdll.pdb
C--- Laboratory 7.exe has triggered a breakpoint.
Laboratory 7.exe has triggered a breakpoint. occurred
Тред вроде закрыл.
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
27
28
29
30
31
32
33
#include <iostream>
#include <iomanip>
#include <string>
#include <windows.h>
#include <stdlib.h>
#include <mutex>
#pragma warning (disable: 6385)
using namespace std;
 
mutex mtx;
int mSize=0, i,max, min,amount=0,workerMean=0;
DWORD tid;
int worker(int *array);
 
int main()
{
     *******
    HANDLE hThread = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)worker,array,0,&tid);
    **************
    WaitForSingleObject(hThread, INFINITE);
    CloseHandle(hThread);
    ****************
    system("pause");
    return 0;
}
//functions//
int worker(int *array)
{
    mtx.lock();
    ***********
    mtx.unlock();
    ExitThread(0);
}
Возможно ,после pause...
Спасибо
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
08.05.2020, 11:53
Ответы с готовыми решениями:

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

Почему в конце программа сама закрывается?
#include &lt;iostream&gt; #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;math.h&gt; float f(float x,int e) { float S=1,n=1; ...

Динамический массив нулевого размера. Почему не падает программа?
char* p = new char; cout &lt;&lt; &amp;p &lt;&lt; endl; Странно, но всё работает. Хотя если зададим отрицательный размер массива char* p = new char;...

9
51 / 36 / 16
Регистрация: 24.01.2020
Сообщений: 94
Записей в блоге: 5
08.05.2020, 13:10
Здравствуйте!

Тот фрагмент кода, что Вы привели, на вид вполне корректен. А крэш по завершении программы, мне кажется, вызван порчей памяти - в основном потоке или в том треде, что Вы запускаете.
На всякий случай, попробуйте оформить worker, как положено:

DWORD __stdcall worker(LPVOID rawArray) {
int *array=(int *)rawArray;
**********
}
1
фрилансер
 Аватар для Алексей1153
6451 / 5652 / 1129
Регистрация: 11.10.2019
Сообщений: 15,053
08.05.2020, 14:01
Amigot, из приведённого кода не видно, что есть array, где он объявляется и как вытаскивается из аргумента в рабочей функции
1
0 / 0 / 0
Регистрация: 23.10.2018
Сообщений: 123
08.05.2020, 14:24  [ТС]
Добавлено через 26 секунд
Алексей1153,
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#include <iostream>
#include <iomanip>
#include <string>
#include <windows.h>
#include <stdlib.h>
#include <mutex>
#include <stdio.h>
//#pragma warning (disable: 6385)
using namespace std;
 
mutex mtx;
int mSize=0, max, min,amount=0,workerMean=0;
DWORD tid;
int worker(int *array);
 
int main()
{
    int *array = new int[mSize];
    cout << "BLOCK1-Array creation" << endl; 
    cout << "Please enter Array Size : " << endl; cin >> mSize;
    for (int i = 0; i < mSize; i++){cout << "Please enter number for element (more then 0) " << i << ":   ";  cin>>array[i];}//
    cout << "Array numbers is entered" << endl;
    cout << "**********************************************" << endl;
    cout << "BLOCK 2-Thread WORKER creation  " << endl;
    HANDLE hThread = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)worker,array,0,&tid);
    cout << "Created  " << endl;
    cout << "**********************************************" << endl; cout << endl;
    cout << "BLOCK 3 -MIN & MAX on Console, after this Sleep from MAIN " << endl;
    min = array[0]; max = array[0];
    for (int i = 0; i < mSize; i++)
    {
        if (max < array[i])   {max = array[i]; Sleep(7);}
        if (min > array[i])   {min = array[i]; Sleep(7);}
    }
    cout << "Min:    " << min << "        Max: " << max << endl;
    cout << "**********************************************" << endl;
    cout << "BLOCK 4-waiting for thread                 " << endl;
    WaitForSingleObject(hThread, INFINITE);
    cout << "**********************************************" << endl;
    cout << "BLOCK 5-number of elements more then mean" << endl;
    cout << "Mean from WORKER THREAD   : " << workerMean << endl;//
    for (int i = 0; i < mSize; i++) { if(array[i]>workerMean) amount++; }
    cout << "Number of elements more then mean   : " << amount << endl;//
    cout << "**********************************************" << endl;
    cout << "BLOCK 6-Finishing" << endl;
    cout << "**********************************************" << endl;
    CloseHandle(hThread);
    system("pause");
    return 0;
}
//functions//
int worker(int *array)
{
    mtx.lock();
    min = array[0]; max = array[0];
    cout <<"Size :" << mSize << endl;
    for (int i = 0; i < mSize; i++) { cout<<"Transferred elements   "<<i<<":    "<<array[i]<<endl; } 
    int sum = 0;
    for (int i = 0; i < mSize; i++) { sum += array[i]; }
    cout << "Sum  from worker :" << sum << endl;
    for (int i = 0; i < mSize; i++){if (min > array[i])  min = array[i];}
    cout << "Min  from worker  :" << min << endl;
    int wSize = mSize - 1;
    workerMean = (sum - min) / wSize;
    cout << "Mean from worker   :" << workerMean << endl;
    mtx.unlock();
    ExitThread(0);
}
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
08.05.2020, 14:36
Цитата Сообщение от Amigot Посмотреть сообщение
cout << "Created  " << endl;
    cout << "*************************************** *******" << endl; cout << endl;
    cout << "BLOCK 3 -MIN & MAX on Console, after this Sleep from MAIN " << endl;
    min = array[0]; max = array[0];
    for (int i = 0; i < mSize; i++)
    {
        if (max < array[i])   {max = array[i]; Sleep(7);}
        if (min > array[i])   {min = array[i]; Sleep(7);}
    }
    cout << "Min:    " << min << "        Max: " << max << endl;
    cout << "*************************************** *******" << endl;
    cout << "BLOCK 4-waiting for thread                 " << endl;
Этот кусок нужно тоже блокировать мьютексом mtx - он изменяет те же переменные, что и поток

Добавлено через 2 минуты
Цитата Сообщение от Amigot Посмотреть сообщение
HANDLE hThread = CreateThread(NULL,0,(LPTHREAD_START_ROUT INE)worker,array,0,&tid);
Убери здесь (LPTHREAD_START_ROUTINE)
1
0 / 0 / 0
Регистрация: 23.10.2018
Сообщений: 123
08.05.2020, 14:37  [ТС]
oleg-m1973, Олег добрый день!
Спасибо большое.
А можно уточнить откуда и докуда лучше? извините данная тема только будет ,я несколько вперёд забежал..
И попытался убрать про стартинг рутин ,пошла ругань про несовместимые типы...
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
08.05.2020, 14:41
Лучший ответ Сообщение было отмечено Amigot как решение

Решение

C++
1
2
3
4
DWORD WINAPI worker(void *arg)
{
    int *array = (int *)arg;
    mtx.lock();
Добавлено через 1 минуту
Цитата Сообщение от Amigot Посмотреть сообщение
А можно уточнить откуда и докуда лучше? извините данная тема только будет ,я несколько вперёд забежал..
Блокируй сразу после CreateThread, разблокируй перед WaitForSingleObject

Добавлено через 28 секунд
C++
1
2
3
4
5
   cout << "Mean from worker   :" << workerMean << endl;
    mtx.unlock();
    //ExitThread(0);
return 0;
}
1
0 / 0 / 0
Регистрация: 23.10.2018
Сообщений: 123
08.05.2020, 14:55  [ТС]
oleg-m1973, Извините не совсем понял про
DWORD WINAPI worker(void *arg)
{
int *array = (int *)arg;
mtx.lock();
и (LPTHREAD_START_ROUTINE)

Добавлено через 6 минут
oleg-m1973, блок 3 залочил
но падает на pause ,то что вышепока не трогал..
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
08.05.2020, 15:05
Цитата Сообщение от Amigot Посмотреть сообщение
oleg-m1973, Извините не совсем понял про
Что непонятного? Сделай функцию worker так, а (LPTHREAD_START_ROUTINE) убери вообще
0
0 / 0 / 0
Регистрация: 23.10.2018
Сообщений: 123
08.05.2020, 15:12  [ТС]
ааа
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
08.05.2020, 15:12
Помогаю со студенческими работами здесь

Почему при изменении литерала const char* программа падает?
точнее литерала. ладно, если бы выходил за пределы

Почему программа падает при сортировке массивов больших размерностей
Добрый день! Подскажите почему прога крашится при размере массива 10000, при значении 1000 все прекрасно работает. #include...

Почему падает программа до исполнения основного кода
09-05 11:15:57.226: E/dalvikvm(759): Could not find class 'twitter4j.http.AccessToken', referenced from method...

Почему при записи в не выделенную память программа не падает?
Разбираюсь с malloc(), делаю так: #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;string.h&gt; int main() { char *buf; ...

Почему программа "падает" на функции заполнения дерева?
Здравствуйте! У меня проблема с заполнением дерева. #include &quot;stdafx.h&quot; #include &lt;iostream&gt; using namespace std; ...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG-файла с альфа-каналом с помощью библиотеки SDL3_image на Android
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru