如上所述,我试图创建一个结构数组,然后用一些起始数据填充一个结构数组,然后写入/读取。我仍在按照我之前的问题编写缓存模拟器: 有什么方法可以在 istream get 结束时摆脱空字符?
这是我制作数组的方式:
struct cacheline
{
string data;
string tag;
bool valid;
bool dirty;
};
cacheline **AllocateDynamicArray( int nRows, int nCols)
{
cacheline **dynamicArray;
dynamicArray = new cacheline*[nRows];
for( int i = 0 ; i < nRows ; i++ )
dynamicArray[i] = new cacheline [nCols];
return dynamicArray;
}
我从主要调用这个:
cacheline **cache = AllocateDynamicArray(nooflines,noofways);
似乎可以创建数组,但是当我尝试填充它时出现内存错误,这就是我尝试的方法:
int fillcache(cacheline **cache, int cachesize, int cachelinelength, int ways)
{
for (int j = 0; j < ways; j++)
{
for (int i = 0; i < cachesize/(cachelinelength*4); i++)
{
cache[i][ways].data = "EMPTY";
cache[i][ways].tag = "";
cache[i][ways].valid = 0;
cache[i][ways].dirty = 0;
}
}
return(1);
}
调用它:
fillcache(cache, cachesize, cachelinelength, noofways);
现在,这是我第一次真正尝试使用动态数组,所以我完全有可能做错了,更不用说在尝试使其成为 2d 时,任何想法都将不胜感激:)
此外,是否有更简单的方法来写入/读取数组?目前(我认为)我不得不在函数之间传递大量变量,包括数组(或指向数组的指针?)每次这似乎效率不高?我不确定的其他事情,当我传递数组(指针?)并编辑数组时,当我退出函数时,数组还会被编辑吗?
谢谢
编辑:刚刚注意到一个非常愚蠢的错误,它当然应该是:
cache[i][j].data = "EMPTY";