[英]Nested Array of Structs inside another Struct
我正在尝试对缓存模拟器进行建模,因为我已经设置了所有逻辑,所以我没有发布所有代码,但是我正在尝试使用结构来完成手头的任务。
我有两种类型的结构,一种是行,其中包含:
int LineIndex无符号长标记位int vbit
然后,我有一个结构集,其中包含:
int LRU int SetIndex行* SetLines
现在,我将其描绘为二维数组。 我做了一个变量Cache,它是一个指向Set的指针。 代码在下面.....
typedef struct{
int Vbit;
unsigned long LineTagBits;
int LineIndex;
}Line;
typedef struct{
Line* SetLines;
int LRU;
int SetIndex;
}Set;
int s, b, E, SetNum, BlockNum, i, c = 0;
unsigned long SetMask, BlockMask,TagMaks = 0;
Set* Cache = NULL;
Line* SetLines = NULL;
void MallocAndInitialize(){
Set Cache[SetNum];
for (int i = 0; i < SetNum; i++){
Cache[i].LRU = 0;//set LRU line
Cache[i].SetIndex = i;//set set INDEX
printf("You are at Set %i \n", Cache[i].SetIndex);
Cache[i].SetLines = (Line *)malloc(E * sizeof(Line));
for (int j = 0; j < E; j++){
Cache[i].SetLines[j].Vbit = 0;
Cache[i].SetLines[j].LineIndex = j;
Cache[i].SetLines[j].LineTagBits = 0;
printf("Set %i, Line %i\n", Cache[i].SetIndex, Cache[i].SetLines[j].LineIndex);
}
}
}
int main(int argc, char *argv[]){
while ((c = getopt(argc, argv, "s:E:b:")) != -1)
{
switch (c){
case's':
s = atoi(optarg);
SetNum = 1 << s;
MallocAndInitialize();
break;
case'E':
E = atoi (optarg);
break;
case 'b':
b = atoi (optarg);
BlockNum = 1 << b;
break;
default:
printf("Error!");
exit(1);
}
}
//printSummary(0, 0, 0);
free(Cache);
return 0;
}
现在的问题是它将在MallocandInitialize中执行第一个打印语句,但不会执行第二个打印语句。 我试图弄清楚是否无法正确访问每一行。 任何帮助深表感谢。
谢谢
您的程序取决于命令行参数的顺序。
需要-E来设置全局变量'E'。 但是-s将调用MallocAndInitialize读取E。
这不是您代码的良好组织。
我建议将MallocAndInitialize
移出处理参数的循环。
我看不到有任何保证,当调用MallocandInitialize时, 会为E分配一个特定的值。
您确定E大于零吗?
请在进入内部循环之前尝试打印它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.