我在程序中遇到分段错误,我很确定这是一个愚蠢的错误!当我尝试访问我的结构数组中的数据时,我得到了一个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
所以它似乎是标签变量的问题?对我毫无意义
提前致谢:)
答案 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(...);
}