以下代码有什么问题
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,但什么都不打印
答案 0 :(得分:1)
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;
}
答案 1 :(得分:1)
怎么了...?
您使用的指针的自动持续时间值更合适。
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;
答案 2 :(得分:-1)
您的指针未初始化。此外,根据ΦXocę웃Пepeúpaツ的回答,请确保何时使用指针正确使用new / delete。对于每个new
关键字,应该有一个delete
。通过将指针设置为NULL
(从C ++ 11开始,建议使用nullptr
:NULL vs nullptr (Why was it replaced?)来避免悬空指针(不引用任何内容的指针)也是一种好习惯完成后,What exactly is nullptr?个问题提供了一些很好的解释。
但是,在这种情况下,我同意橡果。您不必指向vector
对象,因为它是如何分配内存的。仅将vector
用于您的解决方案就足够了。