2013-12-20 4 views
0

Я пытаюсь создать массив структур с динамическим размером и попытаться присвоить значения каждой из этих структур. Я знаю, что я мог бы использовать вектор, чтобы легко решить эту проблему, но я делаю это как упражнение, чтобы изучить основы C++ и как он действительно работает в своем ядре.Как назначить значение фиксированному массиву указателей на структуры

структура в этом случае

struct car 
{ 
     std::string make; 
     int year; 
}; 

Затем в основной функции(), у меня есть:

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; 
} 

Запуск выше дает мне ошибку сегментации сразу после ввода грим и нажав войти. Может кто-нибудь помочь объяснить, что происходит?

+0

Что такое 'catSize'? – HAL

+0

Есть ли что-то не так с использованием объектов, а не 'new'? – chris

+0

catSize - введенное пользователем целое число - поэтому в этом случае я ставлю значение 3. – mjsalinger

ответ

3

Похоже, что после ввода размера массива '\n' остается во входном буфере и мешает дальнейшему вводу.

Кроме того, вы должны иметь catSize как постоянный, так как VLAs не поддерживаются всеми компиляторами.

Если вы все еще хотите использовать VLA, вам следует добавить cin.ignore(); после прочтения размера массива.

Кроме того, следует отметить, что в настоящее время это не динамический массив структур, как указано в вашем вопросе, но фиксированный массив указателей на структуры.

+0

Это в конечном счете сработало. Добавление cin.ignore() устраняет проблему. Стоит отметить, что я столкнулся с той же проблемой после первого раза через цикл for, поскольку \ n от ввода года все еще остался в буфере, поэтому он предположил, что в качестве ввода для следующего ввода make. – mjsalinger

Смежные вопросы