Ошибка ошибки сегмента C ++ (файл IO / getline) - PullRequest
0 голосов
/ 27 февраля 2020

У меня возникла проблема, связанная с получением ошибки сегментации, исходящей из одной из этих трех частей моего кода, предположительно. Я пробовал разные тактики отладки, добавляя cout, чтобы увидеть, в какой момент код облажался, но безрезультатно. Любая помощь будет принята с благодарностью.

void agency::readAllData()
{
    int index;
    char inputFile[100];
    char delim = '}';
    car * p_car;
    p_car = m_inventory;
    cout << "Input file name: " << endl ;
    cin >> inputFile;
    ifstream input (inputFile);
    if (input)
    {
        input >> m_name >> m_zipcode;
        for (index = 0; index < 5; index++)
        {
            int tempYear, tempAvailable;
            float tempPrice;
            char tempMake[256], tempModel[256], tempSensors[256], tempOwner[256];
            input >> tempYear >> tempMake >> tempModel >> tempPrice;
            input.getline(tempSensors, 256, delim);
            input >> tempAvailable;
            if (tempAvailable = 0);
            {
                input >> tempOwner;
            }
            p_car -> readCars(tempYear, tempMake, tempModel, tempPrice, tempSensors, tempAvailable, tempOwner);
            p_car++;
        }
    }
    else
    {
        cerr << "Input file cannot be opened" << endl;
        return;
    }
    return;
}

void sensor::readSensors(char tempSensors[], sensor *sensor_ptr)
{
    int index1;
    int index2 = 0;
    int index3 = 0;
    for(index1 = 0; tempSensors[index2] != '\0'; index1++)
    {
        if (tempSensors[index1] = 'g')
        {
            gpsCount++;
        }
        else if (tempSensors[index1] = 'l')
        {
            lidarCount++;
        }
        else if (tempSensors[index1] = 'r')
        {
            radarCount++;
        }
        else if (tempSensors[index1] = 'c')
        {
            cameraCount++;
        }
        for(index2+=index1; tempSensors[index2] != ' '; index2++)
        {
            sensor_ptr->m_type[index3] = tempSensors[index2];
            index3++;
        }
        sensor_ptr++;
    }
    return;
}

эти функции существуют среди отдельных файлов, но взаимодействуют в порядке, который я их вставил.

1 Ответ

0 голосов
/ 27 февраля 2020

Ваш код не компилируется, поскольку он не является ни минимальным примером, ни полным набором кода.

Без глубокого анализа эта строка выглядит подозрительной:

if (tempAvailable = 0);

Это не должно t компилируется вообще, и вы также назначаете 0 для tempAvailable.

. Особенно с segfaults использование отладчиков намного лучше, чем отладка печати. ​​

Я предлагаю поискать учебники по gdb. Другой вариант - попытаться скомпилировать код с обработкой адресов (просто Google для этого).

...