Я нахожусь в вводном классе C++, поэтому я совершенно новичок в этом, но я, кажется, получаю segfault во время выполнения со следующим кодом (урезанный примерно до того места, где я думаю, что проблема):Получение segfault, работающего с массивами в C++
int main(int argc, char *argv[])
{
string filename;
ifstream infile;
float average;
int const ARRAY_SIZE = 20;
int count = 0;
string responses[ARRAY_SIZE];
string response;
char grade;
welcome();
splash();
cout << showpoint << setprecision(1) << fixed;
cout << "\n\n\n\n\n\n\n\n\n\n\n"
<< "\t\tEnter 8-Ball response file name: ";
cin >> filename;
infile.open(filename.c_str());
system("CLS");
cout << "score";
cout << "\n\n\n\n";
if (infile)
{
while (!infile.eof())
{
infile >> response;
if (1==1)
{
responses[count] = response;
count ++;
}
}
infile.close();
}
cout << "\n\n\n";
system("PAUSE");
return 0;
}
там какие-то дополнительные строки, переменные и т.д. в там только потому, что это выброшенное вместе из различных старых программ, и я не включаю в себя функцию, потому что это не там, где проблема кажется быть. В принципе, всякий раз, когда я ввожу имя файла, я получаю segfault. Он печатает «счет», так что после этого момента я попытался извлечь часть if, но это все еще дало мне печаль, так что кажется, что проблема связана с кодом в инструкции while. Мы не перешли на segfaults в деталях, поэтому я даже не знаю, с чего начать поиск проблемы.
'а' неверно, это должно быть 'while (infile >> response)'. Что произойдет, если ваш файл содержит более 20 ответов? Вместо жесткого кодирования массива для некоторого произвольного размера вы должны использовать 'std :: vector', который расширяется по размеру по мере необходимости. Если это то, чему вас учат в вашем классе, это очень плохой класс, которого я боюсь. –
Прошли ли вы с помощью отладчика, чтобы пройти через вашу программу, чтобы вы могли видеть, где произошла ошибка? Segfaults обычно исходят от неправильного использования указателей или записи за пределами массива. – Barmar
@ neil-kirk Да, это то, чему нас учили. Этот учитель был немного шелушился о некоторых вещах, поэтому я не могу сказать, что я полностью потрясен, услышав, что мы узнали что-то не так. К счастью, осталось всего несколько недель. Похоже, первое предложение, которое вы сделали, это, в основном, замена, но что именно я делаю со вторым? – sagev9000