abort()调用指针数组错误

时间:2016-10-11 16:05:28

标签: c++ arrays class pointers

int main(){

vector <string> v;

std::ifstream input("data.txt");
std::string line;

从文本文件中读取数据 文件包含数据行,每行包含1个参数4行共同制作学生数据

while( std::getline( input, line ) ) {
    v.push_back(line);
}
int k = 0, count = 0;
int size = v.size() / 4;
Student **temp;
temp = new Student*[size];
string name, ID, department, CGPA;

这里我正在阅读矢量并在这里创建一个新的学生对象

for (int i = 0; i < v.size();++i)
{
    if (k == 0)
    {
        name = v[i];
    }
    if (k == 1)
    {
        ID = v[i];
    }
    if (k == 2)
    {
        department = v[i];
    }
    if (k == 3)
    {
        CGPA = v[i];
        k = 0;

这里它崩溃了

        temp[count] = new Student(name, stof(ID.c_str()), department, stof(CGPA.c_str()));
        temp[count]->print();
        count++;
        //cout << name << "\t" << ID << "\t" << department << "\t" << CGPA << endl;
        //break;
    }
    k++;

}

system("pause");

 }

1 个答案:

答案 0 :(得分:2)

k == 3设置k = 0;时。然后您执行k++;,因此下次循环时,您需要k == 1,并跳过name作业。

而不是循环遍历v 1乘1,并使用变量来跟踪您正在处理的项目,请按4的步骤执行。

for (int i = 0; i < v.size(); i += 4)
{
    name = v[i];
    ID = v[i+1];
    department = v[i+2];
    CGPA = v[i+3];
    temp[count] = new Student(name, stof(ID.c_str()), department, stof(CGPA.c_str()));
    temp[count]->print();
    count++;
}

如果您只是将学生放入向量中,您可以避免所有这些麻烦。您可以以4行为单位读取文件,创建Student,然后将其推送到向量中。