矢量走出范围

时间:2013-12-12 10:15:25

标签: c++ vector struct scope

所以我的结构向量超出了范围我遇到了问题。我不知道为什么。我之前使用过矢量但由于某种原因这不起作用。我查看了几个论坛并尝试了几种不同的方法来解决这个问题。

构造函数和DirectMap方法都在main中调用。我希望向量保持两种方法的范围。这可能吗?非常感谢帮助人们!

下面是我如何在头文件中声明它:

struct input
{
    bool dirtyBit;
    int statusBit; //0 not in cache, 1 in cache, 2 in 2nd cache
    bool writeStatus; //write = 1 read = 0
    int address;
    int indivBlockIndex;
    int indivBlockOffset;
};
    class Cache
    {

    public:

        vector<input *> dataBase;
        Cache(string);
        ~Cache();

        void DirectMapped(int, int);
    };

以下是我如何使用它:

Cache::Cache(string infile)
{
    ifstream in(infile);

    string readWriteStatus;
    int Addr;
    while (in >> readWriteStatus >> hex >> Addr)
    {
        input *contents;
            contents = new input;
        contents->dirtyBit = false;
        contents->statusBit = 0;
        dataBase.push_back(contents);   
    }
}

Cache::~Cache(){}

void Cache::DirectMapped(int cacheSize, int blockSize)
{
    //initial stats needed
    int blockCount = cacheSize/blockSize; //number of total blocks
    //clear out the cache
    for (int i = 0; i <= dataBase.size(); i++)
        dataBase[i]->statusBit = 0;
//other irrelevent stuff after this
}

再次感谢您抽出宝贵时间帮助我。

1 个答案:

答案 0 :(得分:2)

问题是你在向量中存储指向input结构的指针,但你从未让它们指向任何地方。一个简单的修复可能是改变

input *contents;

input *contents = new input;

然而,管理原始点的矢量会产生各种令人讨厌的后果。在您的特定情况下,我认为没有理由首先持有指针向量。只需使用

vector<input> dataBase;

...并存储实际结构。

相关问题