Что не так со следующим кодом
vector < double >* a; a->push_back(25); a->push_back(30); a->push_back(15); a->push_back(40); cout << a->at(2) << endl;
Должно быть напечатано 15, но ничего не печатается
Ваш указатель не был инициализирован.Кроме того, основываясь на ответе ΦXocę 웃 Пepeúpa ツ, убедитесь, что при работе с указателями правильно используете new / delete.Для каждого ключевого слова new должно быть delete.Также рекомендуется избегать висячих указателей (указателей, которые ничего не ссылаются), устанавливая для них значение NULL (по состоянию на C ++ 11 рекомендуется использовать nullptr: NULL против nullptr (почему это так)заменили?) и Что такое nullptr? вопросы дают некоторые хорошие объяснения), когда вы закончите.
new
delete
NULL
nullptr
Однако в этом случае я согласен с Acorn.Вам не нужно указывать на объект vector из-за того, как он выделяет память.Достаточно просто использовать vector для вашего решения.
vector
Что не так ...?
Вы используете указатель, для которого более подходит автоматическое значение продолжительности.
std::vector < double > a; a.push_back(25); a.push_back(30); a.push_back(15); a.push_back(40); std::cout << a.at(2) << std::endl;
a является указателем, но не инициализирован должным образом ... он должен выглядеть следующим образом:
int main() { std::vector<double>* a = new std::vector<double>; a->push_back(25); a->push_back(30); a->push_back(15); a->push_back(40); std::cout << a->at(2) << std::endl; delete a; return 0; }