Я новичок в программировании на C++, и я пытаюсь учиться. В настоящее время я работаю над программой, которая читает из файла, который имеет в строках строки строку, за которой следуют 3 целых числа.Ошибка сегментации C++, связанная с выражением atoi
Пример: (Это первый набор данных, есть девять других в том же формате, как показано ниже)
Linus too good
100
23
210
Строки хранятся в массиве 1D в то время как целые числа хранятся в 2D массив.
До сих пор у меня есть это:
#include <stdlib.h>
#include <iostream>
#include <fstream>
#include <string>
void FileToArray();
using namespace std;
int main()
{
FileToArray();
return 0;
}
void FileToArray()
{
ifstream inFile;
inFile.open("bowlers2.txt");
const int STRING_ARRAY_SIZE = 10;
const int NUM_ROW_SIZE = 3;
const int NUM_COL_SIZE = 10;
double scores[NUM_ROW_SIZE][NUM_COL_SIZE];
string names[STRING_ARRAY_SIZE];
string mystring;
for(int r = 0; r < 10; r++)
{
getline(inFile, names[r]);
for(int c = 0; c < 3; c++)
{
getline(inFile, mystring);
scores[r][c] = atoi(mystring.c_str());
}
}
cout << "The names are:\n";
for (int i = 0; i < STRING_ARRAY_SIZE; i++)
{
cout << names[i] << "\n";
for (i = 0; i < NUM_COL_SIZE; i++)
{
for (int j = 0; j < NUM_ROW_SIZE; j++)
{
cout << scores[i][j] << "\n";
}
}
}
}
inFile.close();
я изолирован из десятки [R] [с] = atoi (mystring.c_str()); и программа работает, хотя и дает значения для мусора. Вот что выход:
The names are:
Linus too good
0
2.96439e-323
6.63467e-315
6.95306e-310
6.94939e-310
1.4822e-323
2.52023e-320
6.94939e-310
6.94939e-310
6.95306e-310
6.91692e-323
7.6287e+228
6.59695e-310
6.94939e-310
6.95306e-310
6.95306e-310
7.41098e-323
3.44197e+175
1.69599e+161
5.83684e-310
6.95306e-310
6.94939e-310
0
6.94939e-310
0
0
0
0
1.02437e-316
4.04739e-320
Спасибо заранее за любую помощь по этому вопросу.
Вы указали 'двойные баллы [NUM_ROW_SIZE] [NUM_COL_SIZE];' с 'NUM_ROW_SIZE = 3'. Однако ваш цикл 'for (int r = 0; r <10; r ++)' подходит к 'r = 10' и вы получаете доступ к' score [r] [c] '. Плохо. Правильный диапазон 'r' составляет от 0 до 2. – lurker
Просто FYI, как ошибка сегации, так и количество мусора фактически указывают на ту же проблему. Это оба возможных результата «неопределенного поведения». См. Также: [Окончательный список общих причин сбоев сегментации] (http://stackoverflow.com/questions/33047452/definitive-list-of-common-reasons-for-segmentation-faults) – CodeMouse92
ty для справки. – mrbw