Посмотрите на этот код: я пытаюсь прочитать несколько строк из консоли и сохранить их в динамическом массиве.
int Doctor::addPatients()
{
string* names = NULL;
int num;
cout << "how many patients are to be added? ";
cin >> num;
numPatients=num;
names = new string[numPatients];
for(int i=0;i++;i<numPatients){
cout << "enter the next patient's name: ";
cin.clear();
cin >> names[i];
}
patients = names; //patients is a private member variable of class Doctor
}
Когда я выполняю этот код, я получаю следующую ошибку:
malloc: *** error for object 0x10c100898: pointer being freed was not allocated
*** set a breakpoint in malloc_error_break to debug
Abort trap: 6
Любая помощь с благодарностью
for(int i=0;i++;i<numPatients) // Condition is the second expression in for syntax
Неверный синтаксис.
for(int i=0;i<numPatients; i++)
Какой компилятор вы используете? Вы должны получить ошибку компиляции, чем ошибку времени выполнения. Также вы написали конструктор копирования? Для получения дополнительной информации см. Правило трех. Чтобы облегчить работу, используйте std::vector<std::string>
,
Вы не инициализируете целое число я
В заявлении, for(int i;i++;i<numPatients)
i
должно быть установлено в 0, а условие должно быть вторым параметром
Правильный формат должен быть —
for(int i=0;i<numPatients;i++)
cin
не очень хороший способ получить строку ввода. cin читает только до тех пор, пока не увидит пробел (пробел, символ новой строки, табуляция). Альтернативно используйте функцию getline —
синтаксис:
getline(cin,names[i])