C 编程:结构 ptr 处的分段错误.内存分配问题



我在运行时遇到段错误:

我正在尝试用 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_ ) );

至少应该有助于解决这个问题。

相关内容

  • 没有找到相关文章

最新更新