所以我的结构向量超出了范围我遇到了问题。我不知道为什么。我之前使用过矢量但由于某种原因这不起作用。我查看了几个论坛并尝试了几种不同的方法来解决这个问题。
构造函数和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
}
再次感谢您抽出宝贵时间帮助我。
答案 0 :(得分:2)
问题是你在向量中存储指向input
结构的指针,但你从未让它们指向任何地方。一个简单的修复可能是改变
input *contents;
到
input *contents = new input;
然而,管理原始点的矢量会产生各种令人讨厌的后果。在您的特定情况下,我认为没有理由首先持有指针向量。只需使用
vector<input> dataBase;
...并存储实际结构。