Вызвано исключение: нарушение доступа для чтения. Проблема с динамическим массивом

Суть задания, которое я выполняю: На вход идет строка. Мне нужно найти в ней слова, содержащие определенную букву и вывести их в двумерном массиве размером m на n, где m - это номер предложения, а n - просто номер слова, каким оно добавилось. Плюсом в идеале сделал форматированный вывод массива, чтобы выглядел красиво, но я пока не нашел того, что поможет мне это сделать, поэтому просто для вида через пробелы там вывожу.

Проблема: Беда в массиве. Он динамический, т.к. заранее мы не знаем ни количество предложений, ни количество слов, которые нужно будет добавить. Компилятор ругается так "Вызвано исключение: нарушение доступа для чтения. this было 0xCDCDCDCD". Погуглив, понял что корень проблемы то ли в потере указателя, то ли в выделении памяти, но разобраться так и не смог, поэтому прошу помощи. Исключение возникает при вводе данных в программу.

UPD: Возможно, метод newColomnInArr содержит ошибку, но скорее вычислительного характера, которая не мешает компиляции кода. Я пробовал убрать этот метод и всё равно ничего не менялось (убрать, конечно, полностью).

Что показывает стек

Мой код:

#include <iostream>
#include <string>

using namespace std;

void newColomnInArr(string** sArr, int length)
{
    length++;
    sArr[length - 1] = new string[6];
}

int main()
{
    setlocale(LC_ALL, "Russian");
    string s = "", word = "";
    char b = 0;
    short int n = 0;
    bool findWord = false, canRec = false;

    int length = 1, line = 0, colomn = 0;
    string** sArr = new string * [length];
    newColomnInArr(sArr, length);

    cout << "Enter string: ";
    getline(cin, s);
    cout << "And char: ";
    cin >> b;
    cout << "\n\n";

    //searchAndGet(s, b);

    // Цикл, который проходит полностью по всей 
    // строке, ищет слова, содержащие искомую 
    // букву и добавляет их в массив.
    for (int i = 0; i < s.length(); i++)
    {
        if (s[i] == ' ' || s[i] == ';' || s[i] == ':' || s[i] == '"' || s[i] == ',')
        {
            if (findWord == true)
            {
                sArr[line][colomn] = word;
                word = "";
                findWord = false;
                canRec = false;

                if (colomn == length)
                {
                    newColomnInArr(sArr, length);
                    colomn++;
                }
                else 
                {
                    colomn++;
                }
            }
        }
        else
        {
            if (s[i] == '.')
            {
                if (findWord == true)
                {
                    sArr[line][colomn] = word;
                    word = "";
                    findWord = false;
                    canRec = false;
                    line++;
                    colomn = 0;
                }
                else
                {
                    line++;
                    colomn = 0;
                    word = "";
                    canRec = false;
                }
            }
            else
            {
                if (s[i] == b)
                {
                    findWord = true;
                    canRec = true;
                }
                else
                {
                    canRec = true;
                }
            }
        }

        if (canRec == true)
        {
            word += s[i];
        }

    }
    
    for (int i = 0; i < length; i++)
    {
        for (int j = 0; j < 5; j++)
        {
            cout << sArr[i][j] << "  ";
        }
        cout << "\n";
    }

    for (int i = 0; i < length; i++)
    {
        delete[] sArr[i];
    }
    
    return 1;

}

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

Автор решения: votchezanick

Было решено, что программу нужно переписать с нуля и слегка иначе, поэтому оставляю общий ответ и закрываю вопрос. Спасибо за помощь @KoVadim и @EOF

→ Ссылка