我在运行时遇到段错误:
我正在尝试用 C 语言构建此缓存模型。
因此,代码编译良好,但是我在运行时遇到段错误。我追踪到这一行:
cache->set[i]->block = (Block *) malloc( cache->numSets * sizeof( Block ) );
我尝试将 Block 制作为 Set 结构中的数组。但这会带来其他问题,事实上也给出了相同的分段错误。
typedef struct CacheMemory* Cache;
typedef struct Set_* Set;
typedef struct Block_* Block;
struct Block_ {
int valid;
int tag; // int *tag;
int dirty;
};
struct Set_ {
int numBlocks;
Block *block;
};
struct CacheMemory {
<snip>
Set *set;
};
Cache cache;
cache = (Cache) malloc(sizeof ( struct CacheMemory ) );
cache->set = (Set *) malloc( numSets * sizeof( Set ) );
for (i=0; i<cache->numSets; i++) {
//for (j = 0; j < cache->blockSize; j=j+1) {
// Note: I get segfault at line below during runtime
cache->set[i]->block = (Block *) malloc( cache->numSets *sizeof( Block ) );
//cache->set[i]->block[j] = (Block_) malloc (sizeof(Block_) );
// }
}
>Set
是指向struct Set_
的指针,所以你的malloc
cache->set = (Set *) malloc( numSets * sizeof( Set ) );
保留指针,而不是struct Set_
对象。将其重写为
cache->set = (Set *) malloc( numSets * sizeof( struct Set_ ) );
至少应该有助于解决这个问题。