Ошибка чтения символов строки и нарушения прав доступа

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

Необработанное исключение в 0x000D3619 в Project5.exe: 0xC0000005: расположение чтения нарушения доступа 0x00000000.

Что здесь происходит? Я знаю, что это как-то связано с тем, как я открываю файл и мой вектор. Но я не знаю что.

Вот моя основная функция:

int main()
{
vector<shape*> shapes;
shapes.resize(1000);

ifstream fs;
string filen = "shapers.txt";
fs.open(filen.c_str());
string obj="";
fs>>obj;
//int j=0;
while (!fs.fail()) {
if (obj == "Sphere") {
double radius;
fs>>radius;
shapes.push_back(new sphere(radius));
//shapes[j] = new sphere(radius);
} else if (obj == "Cuboid") {
double width, height, length;
fs >> width >> length >> height;
shapes.push_back(new cuboid(width,length,height));
//shapes[j] = new cuboid(width,length,height);
} else if (obj == "Cylinder") {
double radius, height;
fs >> radius >> height;
shapes.push_back(new cylinder(radius,height));
//shapes[j] = new cylinder(radius,height);
}
fs >> obj;
//j++;
}
fs.close();for (int i=0; i<=5; i++)
{
shapes[i]->display();
cout<<endl;
}
maxSurfaceArea(shapes);

expandAll(2);

for (int i=0; i<=5; i++)
{
shapes[i]->display();
cout<<endl;
}
//cout<<shapes[0]<<" "<<shapes[1]<<" "<<shapes[2]<<" "<<shapes[3]<<" "<<shapes[4]<<" "<<shapes[5]<<endl;pause_215(true);
return 0;

}

-1

Решение

Первое, что вы делаете, это:

shapes.resize(1000);

Затем, когда вы читаете в форме, вы звоните

shapes.push_back(...

Таким образом, ваш вектор будет иметь размер 1001, 1002 и т. Д. Первые 1000 указателей на фигуры будут показывать вам нарушения доступа, как вы видели.

Вы должны либо просто позвонить

shapes.reserve(1000)

в начале, или, честно говоря, просто оставьте эту строку полностью, так как вы ожидаете только <10 фигур (на порядок)

2

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector