gpt4 book ai didi

C 编程奇怪的结构设置

转载 作者:行者123 更新时间:2023-12-02 00:38:01 24 4
gpt4 key购买 nike

我正在尝试构建这个项目,但由于某种原因,程序在我运行时挂起。如果我注释掉数据缓存行,它工作正常。但它不能为两个不同的缓存调用 makeCache 我不知道为什么任何 C 专家都知道。我是 c 的新手。

   /*
* main.c
*
* Created on: Sep 16, 2010
* Author: TJ
*/
#include <stdlib.h>
#include <stdio.h>
typedef struct {
int tag;
int valid;
int LRU;
int offset;
}directoryBlock;

typedef struct{
int setNumber;
directoryBlock blocks[];
}cacheSet;

typedef struct{
int cacheNumber;
cacheSet *sets[];
}cache;

cache* makeCache(cache *makeMe,int numberOfSets, int blocksPerSet);


int main(void)
{
int i = 0;
//cache * temp = makeCache(10,200);
i = 0;
int j = 0;
cache *instructions = malloc(sizeof(cache) + sizeof(cacheSet*));
cache *data = malloc(sizeof(cache) + sizeof(cacheSet*));
makeCache(instructions,20,300);
makeCache(data,20,300);
for(j=0;j < 20;j++)
{
for(i = 0; i < 300;i++)
{
printf("Data From Set %d Block %d, Valid %d, Tag %d, LRU %d, Offset %d\n",j,i
,instructions->sets[j]->blocks[i].valid,instructions->sets[j]->blocks[i].tag
,instructions->sets[j]->blocks[i].LRU,instructions->sets[j]->blocks[i].offset);
}
}

return 0;

}

cache* makeCache(cache *makeMe,int numberOfSets,int blocksPerSet)
{
int i = 0;
int j = 0;
for(j=0; j < numberOfSets;j++)
{

cacheSet *newSet = malloc(sizeof(cacheSet) + sizeof(directoryBlock)*blocksPerSet);
for(i = 0; i < blocksPerSet; i++)
{
directoryBlock temp;
temp.LRU = i*j;
temp.tag = i*j;
temp.offset = i*j;
temp.valid = i;
newSet->blocks[i] = temp;
}
makeMe->sets[j] = newSet;
}



return makeMe;
}

最佳答案

您没有为 cacheSet 数组分配空间,您有 20 个 cacheSet,所以尝试将“20 *”添加到行中:

cache *instructions = malloc(sizeof(cache) + 20 *sizeof(cacheSet*));
cache *data = malloc(sizeof(cache) + 20 * sizeof(cacheSet*));

关于C 编程奇怪的结构设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3766035/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com