-1

如上所述,我试图创建一个结构数组,然后用一些起始数据填充一个结构数组,然后写入/读取。我仍在按照我之前的问题编写缓存模拟器: 有什么方法可以在 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";
4

1 回答 1

0

你应该找到你的幸福。您只需要时间检查一下(:

通往幸福的路

于 2013-05-06T16:07:15.637 回答