访问数组分段中的数据错误

时间:2016-10-30 21:10:08

标签: c pointers memory dynamic-memory-allocation

我在程序中遇到分段错误,我很确定这是一个愚蠢的错误!当我尝试访问我的结构数组中的数据时,我得到了一个segemtentation错误。

DoString("package.path = '<my_path>' .. package.path");

所以内存分配是

struct block {
  int validBit;                        
  int tag;                            
  unsigned long data;              
};
typedef struct block block_t;

struct set{
 block_t *blocks;
 int tst;
};
typedef struct set set_t;

struct cache{
  //bunch of variables I have left out for this question

  set_t *set;
};
typedef struct cache cache_t;

缓存包含一组包含16个元素的数组。 cache-&gt; sets包含一个包含2个元素的块数组。

当我尝试在块结构中设置变量的值时,会出现分段错误。

cache_t *cache = NULL;
cache = malloc(sizeof(*cache);
if(cache == NULL){
  fprintf(stdout,"Could not allocate memory for cache!");
}

cache->set = malloc(16 * sizeof(*cache->set));
if(cache->set == NULL){
  fprintf(stdout,"Could not allocate memory for cache->set!");
 }

cache->set->blocks = malloc(2 * sizeof(*cache->set->blocks));
if(cache->set->blocks == NULL){
 fprintf(stdout,"Could not allocate memory for cache->set->blocks!");
}
编辑:似乎变量&#34;标签&#34;存在问题。内部块。如果我在集合[1]中为validbit赋值,则不会产生分段错误。

cache->set[0].blocks[0].tag = 1; //This works
cache->set[0].blocks[1].tag = 2; //This works
cache->set[1].blocks[0].tag = 3; //Segmentation fault

所以它似乎是标签变量的问题?对我毫无意义

提前致谢:)

1 个答案:

答案 0 :(得分:1)

您没有为&#34; block_t&#34;分配内存。超越集合[0]。

粗略地说,你应该沿着这些方向做点什么:

cache = malloc(sizeof *cache);
cache->set = malloc(num_sets * sizeof *cache->set);
for (i = 0; i < num_sets; i++) {
    cache->set[i].blocks = malloc(...);
}