Загрузка...

Нужно починить прогу

Тема в разделе C/C++ создана пользователем nik_rumyantsev 5 май 2022. 164 просмотра

  1. nik_rumyantsev
    nik_rumyantsev Автор темы 5 май 2022 0 2 сен 2020
    Здравствуйте. Прошу мне помочь, прога выдаёт ошибку, запускается, работает, но ошибка вылетает после ввода задержки. Задание 3.2 на скрине[IMG]
    C
    #include <iostream>
    #include <windows.h>

    using namespace std;

    int ssize;
    int tick;
    int ou = ssize;
    int A1 = 0;
    int A2 = 0;
    int A3 = 0;
    int A4 = 0;
    int count1 = 0;
    int count2 = 0;
    int secondSize = 0;
    float Sum = 0;

    float* Mass = new float[ssize];
    float* Mass2 = new float[ssize];
    float* Mass4 = new float[ssize];

    HANDLE hSemaphore;

    CRITICAL_SECTION cs;

    DWORD WINAPI Work(LPVOID) {

    EnterCriticalSection(&cs);

    cout << "Введите задержку ";
    cin >> tick;

    for (int i = 0; i < ssize; i++) {
    for (int j = 0; j < ssize; j++) {
    if ((i != j) && (Mass[i] == Mass[j])) {
    Mass2[A2++] = Mass[j];
    break;
    }
    }
    }

    secondSize = ssize - A2;
    float* Mass3 = new float[secondSize];

    for (int i = 0; i < ssize; i++) {
    int temp = Mass[i];
    for (int j = 0; j < ssize; j++)
    if (temp == Mass[j])
    count1++;
    if (count1 == 1) {
    Mass3[A3++] = temp;
    }
    count1 = 0;
    }

    cout << endl;

    for (int i = 0; i < A2 - 1; i++) {
    for (int j = 0; j < A2 - i - 1; j++) {
    if (Mass2[j] > Mass2[j + 1]) {
    int temp2 = Mass2[j];
    Mass2[j] = Mass2[j + 1];
    Mass2[j + 1] = temp2;
    }
    }
    }

    for (int i = 0; i < count1; i++) {
    for (A1 = i + 1; A1 < count1; A1++) {
    if (Mass2[i] < Mass2[A1]) {
    int t = Mass2[i];
    Mass2[i] = Mass2[A1];
    Mass2[A1] = t;
    }
    }
    }

    for (int i = 0; i < A2; i++) {
    Mass4[A4++] = Mass2[i];
    ReleaseSemaphore(hSemaphore, 1, NULL);
    Sleep(tick);
    }

    for (int i = 0; i < secondSize; i++) {
    Mass4[A4++] = Mass3[i];
    ReleaseSemaphore(hSemaphore, 1, NULL);
    Sleep(tick);
    }

    LeaveCriticalSection(&cs);
    return 0;
    }

    DWORD WINAPI SumElement(LPVOID) {
    EnterCriticalSection(&cs);
    for (int i = 0; i < ssize; i++) {
    Sum += Mass4[i];
    }
    cout << "Сумма массива - " << Sum << endl;
    LeaveCriticalSection(&cs);
    return 0;
    }

    int main()
    {
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    setlocale(LC_ALL, "Russian");

    cout << "Введите размер массива ";
    cin >> ssize;

    for (int i = 0; i < ssize; i++) {
    cout << "Введите " << i << " элемент массива: ";
    cin >> Mass[i];
    }

    cout << "Размер массива " << ssize << endl;
    cout << "Заполненный массив" << endl;

    for (int i = 0; i < ssize; i++) {
    cout << "[" << i << "]= " << Mass[i] << endl << flush;
    }

    InitializeCriticalSection(&cs);

    hSemaphore = CreateSemaphoreA(NULL, 0, ssize, NULL);

    DWORD idWork;
    HANDLE hWork = CreateThread(NULL, 0, Work, (void*)NULL, 0, &idWork);

    DWORD idSumElement;
    HANDLE hSumElement = CreateThread(NULL, 0, SumElement, (void*)NULL, 0, &idWork);

    cout << "Измененный массив " << endl;

    WaitForSingleObject(hSemaphore, INFINITE);

    for (int i = 0; i < ssize; i++) {
    WaitForSingleObject(hSemaphore, INFINITE);
    cout << "[" << i << "] = " << Mass4[i] << endl;
    }

    WaitForSingleObject(hSemaphore, INFINITE);

    cout << "[" << ssize << "] = " << Mass4[ssize] << endl;

    system("pause");

    //LeaveCriticalSection(&cs);
    DeleteCriticalSection(&cs);
    CloseHandle(hSemaphore);
    CloseHandle(hWork);


    }
     
  2. UhusahukX
    UhusahukX 7 май 2022 22 18 авг 2020
    Для запуска нужно качать всякое, поэтому могу разве что посоветовать принтить что то в консоль и выходить из программы в разных местах кода, так можно найти точное место где оно крашится и дальше уже проанализировать из за чего
     
    7 май 2022 Изменено
Top
Загрузка...