Вызвано исключение: нарушение доступа для чтения. Проблема с динамическим массивом
Суть задания, которое я выполняю: На вход идет строка. Мне нужно найти в ней слова, содержащие определенную букву и вывести их в двумерном массиве размером 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 шт):
Было решено, что программу нужно переписать с нуля и слегка иначе, поэтому оставляю общий ответ и закрываю вопрос. Спасибо за помощь @KoVadim и @EOF
