C++ процесс завершает работу с кодом -1073741819

программа должна принимать текст (несколько строк) с клавиатуры, признак окончания – слово «and». Затем изменять текст: располагать строки по алфавиту, в конце каждой строки отражать её характеристики (длина строки, количество слов, строчных и прописных символов). Написал следующий код:

#include <iostream>
#include <iomanip>
#include <cstring>
#include <windows.h>
#define N 80
using namespace std;

int scount(char* p); // подсчёт слов в строке

void results(char* s, int k, int* arr); // характеристики строк

int main()
{
    setlocale(LC_ALL, "ru");
    char buff[N] = {"\0"}, ending[N] = {"and"};
    char* din_str[N];
    int k = 0;

    // Ввод текста
    cout << "Введите текст: " << endl;
    while(strcmp(ending, buff))
    {
        gets_s(buff);
        din_str[k] = (char*)malloc(strlen(buff) + 1);
        strcpy(din_str[k], buff);
        k += 1;
    }

    // Сортировка по алфавиту
    for (int i = 0; i < k; i++)
        for(int j = i + 1; j < k; j++)
            if (strcmp(din_str[i], din_str[j]) > 0)
            {
                char* temp = din_str[i];
                din_str[i] = din_str[j];
                din_str[j] = temp;
            }

    // Фомируем массив результатов
    int* arr = new int[4 * k];
    for (int i = 0; i < k; i++)
        results(din_str[i], i, arr);
    

    // Вывод отсортированного текста c результатами
    cout << "Отсортированный текст: " << endl;
    for (int i = 0; i < k; i++)
    {
        cout << din_str[i] << endl;
        for (int j = 0; j < 4; j++)
            cout << setw(5) << *(arr + (4 * i) + j);
        cout << endl;
    }

    for (int i = 0; i < k; i++)
    {
        delete[] arr;
    }
    delete[] din_str;
    delete[] buff;

    system("pause");
    return 0;
}

int scount(char* p)
{
    int word, count = 0, i = 0;
    while (p[i] == ' ' && p[i] != '\0')
        i++;
    word = 0;
    while (p[i] != '\0') {
        if (p[i] != ' ' && word == 0)
        {
            word = 1;
            count++;
        }
        else if (p[i] == ' ')
            word = 0;
        i++;
    }
    return count;
}

void results(char *s, int i, int* arr)
{
        char* pstr;
        int clower = 0, cupper = 0;
        pstr = s;
        for (; *pstr; pstr++)
        {
            if (islower(*pstr)) clower++;
            else if (isupper(*pstr)) cupper++;
        }
        *(arr + 4 * i) = strlen(s);
        *(arr + (4 * i) + 1) = scount(s);
        *(arr + (4 * i) + 2) = clower;
        *(arr + (4 * i) + 3) = cupper;
}

вот пример ввода данных и получения ошибки:ошибка

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


Ответы (0 шт):