struct中的Int数组

时间:2018-04-13 17:37:32

标签: c arrays caching struct

我正在研究我的项目的一部分,这与直接映射的缓存有关。在下文中,我为缓存元素创建了一个结构:

typedef struct node{
  int *tagBits; 
  int *setBits;
  int *blockOff; 
} cacheNode; 

我想在每个元素中存储相应的块偏移位,设置位和标记位。

例如,给定的存储器地址的二进制是:000000000000000000001001110010110011110101000100。我希望前两位是块偏移,接下来的两位是设置位,后面剩下的44是标记。结果应该是blockOff = 00,setBit = 01 tag = rest。参数:blockOff,setBits和tagBits表示多少位属于二进制位(blockOff = 2,set = 2和tag = 44)。这是我到目前为止所尝试的:

void directMap(cacheNode** cache,int blockOff, int setBits, int 
tagBits,int* binary)
{
int tagDec, blockDec, setDec, i= 0; 
cacheNode* element = (cacheNode*)malloc(sizeof(cacheNode)); 

element->blockOff = (int*)malloc(blockOff * sizeof(int)); 
element->setBits = (int*)malloc(setBits * sizeof(int)); 
element->tagBits = (int*)malloc(tagBits * sizeof(int)); 

for(i = 0; i< 48; i++){
  if(i = 0 && i < blockOff){
    element->blocOff[i] = binary[i]; 
  }
  else if(i = (blockOff) && i < (blockOff + setBits)){
    element->setBits[i] = binary[i]; 
  }
}

 printString(element->blockOff,blockOff); 
 printString(element->setBits,setBits); 
}  

我的问题是,当我从我的结构中打印出两个整数数组时,它给了我&#39; 00&#39; for set和blockOff。对于blockOff,答案是正确的但未设置,设置应为&#39; 01&#39;。任何提示为什么?

1 个答案:

答案 0 :(得分:0)

for(i = 0; i< 48; i++){
  if(i = 0 && i < blockOff){

  // Does not executes when above `if()` is true when `blockOff` is positive.
  else if(i = (blockOff) && i < (blockOff + setBits)){  

使用i肯定是错误的。 if(i = 0 && i < blockOff)不断重新分配i=是作业。 ==用于比较。

更改为

for(i = 0; i< 48; i++){
  if(i == 0 && i < blockOff){
  else if(i == (blockOff) && i < (blockOff + setBits)){

这也意味着并非所有警告都已启用。节省时间,启用所有编译器警告。

可能存在其他问题。

提示:避免malloc编码错误。简化并分配给被引用的对象。

// element->blockOff = (int*)malloc(blockOff * sizeof(int));
element->blockOff = malloc(sizeof *(element->blockOff) * blockOff);