我正在尝试创建一个动态大小的结构数组,并尝试为每个结构分配值。我知道我可以使用vector来轻松解决这个问题,但我这样做是为了学习C ++的基础以及它在核心的实际运作方式。
本案例中的结构是
struct car
{
std::string make;
int year;
};
然后在main()函数中,我有:
car* cars[catSize];
for (int i = 0; i < catSize; ++i)
{
cars[i] = new car
cout << "Enter the make for car " << i << ": ";
char ch;
string tempMake = "";
cin.get(ch);
while(ch != '\n')
{
tempMake += ch;
cin.get(ch);
}
cars[i]->make = tempMake;
cout << "Enter the year of car # " << i << ": ";
cin >> cars[i]->year;
}
运行以上操作后,在输入make并按Enter键后立即给出了分段错误。有人可以帮助解释发生了什么吗?
答案 0 :(得分:3)
看来,在输入数组大小后,'\n'
会停留在输入缓冲区中并干扰进一步的输入。
此外,您应该catSize
为常量,因为所有编译器都不支持VLAs
。
如果您仍想使用VLA,则应在读取数组大小后添加cin.ignore();
。
另外,你应该注意到,目前它不是你问题中所述的动态结构数组,而是固定的结构指针数组。