在C ++中初始化指针向量

时间:2014-04-18 11:18:50

标签: c++ vector initialization

我正在尝试以下代码段

#include<iostream>
#include<vector>
#include<string>
using namespace std;

struct mytype
{
    int a;
    string b;
};

int main()
{
    vector<mytype*> my_vec(100);
    for (int i =0;i < 200; i++ )
    {
        if (my_vec[i] == NULL)
            printf("%d th Vector is NULL \n",i);
        else
           printf("You are screwed \n");
    }
    return 0;
}

当我编译并尝试运行它时,除了第101个非NULL位置外,所有200个向量都为空。我可以知道为什么会这样吗? 我想在使用它之前将我的所有向量初始化为NULL

2 个答案:

答案 0 :(得分:2)

你有一个包含100个元素的向量,访问第101个位置会调用未定义的行为。

答案 1 :(得分:2)

向量有100个元素:

vector<mytype*> my_vec(100);
//                     ^^^

你过分地迭代了100个元素:

for (int i =0;i < 200; i++ )
//                ^^^

访问超出范围的向量是未定义的行为。任何值都是可能的,您的程序可能会按照它想要的行为。