Ошибка при чтении символов строки С++
Нужно считать данные с файла в строки, а потом разделить строку на слова и записать в двумерный динамический массив. В первую строку слова записываются без проблем, а когда доходит до второй строки отладчик выдаёт "ошибка чтения символов строки". Подскажите пожалуйста в чём может быть проблема. Заранее спасибо)
Auto.txt :
chevrolet,aveo,седан,AX2857KA,исправен
daewoo,lanos,седан,AX2349BR,исправен
volkswagen,passat,седан,AX9127LP,исправен
mercedes,vito,микроавтобус,AX6098AE,исправен
toyota,rav4,кросовер,AX1936FN,исправен
chevrolet,aveo,седан,AX6289KP,неисправен
daewoo,lanos,седан,AX2837JN,неисправен
volkswagen,passat,седан,AX2578BI,исправен
mercedes,vito,микроавтобус,AX0378HP,исправен
toyota,rav4,кросовер,AX9247PU,исправен
Основной код:
#include <iostream>
#include <iomanip>
#include <string>
#include <sstream>
#include <fstream>
using namespace std;
int CountOfStrings(string filename)
{
ifstream fin;
fin.open(filename);
string str;
int i = 0;
while (!fin.eof())
{
getline(fin, str);
i++;
}
fin.close();
return i;
}
int main()
{
setlocale(LC_ALL, "ru");
int size = CountOfStrings("Auto.txt");
ifstream fin;
fin.open("Auto.txt");
string** arr = new string * [size];
for (int i = 0; i < size; i++)
{
arr[i] = new string[5];
}
for (int object = 0; object < size; object++)
{
for (int field = 0; field < 5; field++)
{
arr[object][field] = "";
}
}
string token;
int field = -1, object = -1;
while (!fin.eof())
{
++object;
string myText("");
getline(fin, myText);
istringstream iss(myText);
string token;
while (getline(iss, token, ','))
{
++field;
arr[object][field] = token;
cout << token<<" ";
}
cout << endl;
}
for (int count = 0; count < size; count++)
delete[] arr[count];
fin.close();
return 0;
}
Ответы (1 шт):
Автор решения: SomeSmile
→ Ссылка
Ошибка в была в том, что я выходил за пределы массива. Вот корректно работающий код:
#include <iostream>
#include <iomanip>
#include <string>
#include <sstream>
#include <fstream>
using namespace std;
int CountOfStrings(string filename)
{
ifstream fin;
fin.open(filename);
int i = 0;
while (!fin.eof())
{
getline(fin, str);
i++;
}
fin.close();
return i;
}
int main()
{
setlocale(LC_ALL, "ru");
int size = CountOfStrings("Auto.txt");
ifstream fin;
fin.open("Auto.txt");
string** arr = new string * [size];
for (int i = 0; i < size; i++)
{
arr[i] = new string[5];
}
for (int object = 0; object < size; object++)
{
for (int field = 0; field < 5; field++)
{
arr[object][field] = "";
}
}
int object = -1;
while (!fin.eof())
{
++object;
string myText("");
getline(fin, myText);
istringstream iss(myText);
string token = "";
int field = -1;
while (getline(iss, token, ','))
{
++field;
arr[object][field] = token;
cout << token<<" ";
}
cout << endl;
}
for (int count = 0; count < size; count++)
delete[] arr[count];
fin.close();
return 0;
}