2015-03-03 172 views
-3

什么可以解释为什么cout在此代码中不显示任何内容?我知道它与v [0] = 1行有关;但我找不到原因,有人对此有解释吗?C++ cout没有显示任何内容

编辑:我也知道改变v [0] = 1; for v.push_back(1);会解决问题。

#include <iostream> 
#include <vector> 

using namespace std; 

int main() 
{ 
    vector<int> v; 
    v[0] = 1; 
    cout << "Hello" << endl; 
    return 0; 
} 
+1

因为计算机永远不会到达那条线,因为程序在前一行崩溃。 – immibis 2015-03-03 03:36:45

+0

对不起,这只是一个错误的复制/粘贴,这不是原因。 – 2015-03-03 03:38:07

+2

只要您调用未定义的行为,程序的其余部分就不确定。 – 2015-03-03 03:39:03

回答

1

,因为你还没说矢量v多少元素有你不能这样做v[0]=1。因此,它会导致运行时错误(崩溃)

声明为vector<int>v(10)(这是说v将有10种元素) 和使用v[0]=1

或者

如果你不知道矢量大小预先使用v.push_back(1);

+0

你会如何解释为什么编译器不会抱怨它? – 2015-03-03 03:43:28

+0

它不检查“outofbound”访问。它会导致未定义的行为 – user7 2015-03-03 03:45:05

+0

@ A.P。请参阅http://stackoverflow.com/q/14015632/4405757。 – user7 2015-03-03 03:46:13

3

此代码线

v[0] = 1; 

实际上调用未定义的行为,因为与此地址关联的内存未分配。

您在此行前加上例如

v.resize(1); 
v[0] = 1; 

确保向量项被分配。


#include <iostream> 
#include <vector> 

using namespace std; 

int main() 
{ 
    vector<int> v; 
    v.resize(1); 
    // alternatively 
    // vector<int> v(1); 

    // alternatively 
    // v.push_back(0); 
    v[0] = 1; 
    cout << "Hello" << endl; 
    return 0; 
} 

fully working sample