@al1bek

Process finished with exit code 139 (interrupted by signal 11: SIGSEGV)?

Есть код:
#include <iostream>
#include <string>

using namespace std;

//Вы выбираете одну из колоний на марсе
//В каждой колонии есть некоторое количество жилищ, которые можно купить
//Стоимость апартаментов рассчитывается из стоимости за квадратный метр в колонии(smetPrice) умноженный на количество квадратных метров самой квартиры(smet)
//Также, на стоимость влияет материал здания(type). Квартиры "Cyberbricks" дороже на 50 процентов. Квартиры "Carbonpanel" дешевле на 20 процентов
//Также, этажи ниже 200 слишком загазованы - и вы не хотите их покупать
//Выведите саму дешевую квартиру, ее стоимость и название города, в котором она находится

struct Apartment {
    string title; // название
    int smet; //количество квадратных метров
    string type; //тип строения. может быть "Cyberbricks", "Carbonpanel" или "Nanolite"
    int level; //этаж. может быть от 1 до 1000
};

struct Colony {
    string name; //название
    int smetPrice; //стоимость за квадратный метр
    int apCount; //количество апартаментов
    Apartment *aparts; //Список апартаментов
};

int main() {
    int size, indexC, indexA;
    double cheapestPrice = INT32_MAX;
    cin >> size;
    Colony *colonies = new Colony[size];

    for(int i = 0; i < size; ++i) {
        cin >> colonies[i].name >> colonies[i].smetPrice >> colonies[i].apCount;

        for(int j = 0; j < colonies[i].apCount; ++j) {
            cin >> colonies[i].aparts[j].title
                >> colonies[i].aparts[j].smet
                >> colonies[i].aparts[j].type
                >> colonies[i].aparts[j].level;
        }

    }

    for(int i = 0; i < size; ++i) {

        for(int j = 0; j < colonies[i].apCount; ++j) {
            double price = colonies[i].smetPrice * colonies[i].aparts[j].smet;

            if (colonies[i].aparts[j].type == "Cyberbricks") price *= 1.5;
            else if (colonies[i].aparts[j].type == "Carbonpanel") price *= 0.8;

            if ((cheapestPrice < price) && colonies[i].aparts[j].level > 200) {
                indexC = i;
                indexA = j;
            }
        }

    }
    cout << colonies[indexC].aparts[indexA].title << " - " << cheapestPrice << " - " << colonies[indexC].name << endl;
}


Выдаёт ошибку: Process finished with exit code 139 (interrupted by signal 11: SIGSEGV).
Никак не пойму что за ошибка, и что она хочет от меня.
  • Вопрос задан
  • 1117 просмотров
Пригласить эксперта
Ответы на вопрос 1
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
Никак не пойму что за ошибка, и что она хочет от меня.

Ошибка -- обращение к памяти, к которой нельзя обращаться, первая ссылка по запросу sigsegv в гугле.
Хочет она от тебя чтобы ты веделил память для colonies[i].aparts перед тем как к ним обращаться.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы