【发布时间】:2018-12-27 23:00:20
【问题描述】:
我在运行时遇到段错误:
我正在尝试在 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_) );
// }
}
【问题讨论】:
-
欢迎来到 SO。您是否使用调试器来跟踪分段错误?你检查过涉及的变量吗?
i中存储了哪个值? -
在你的for循环中:
for (i=0; i<cache->numSets; i++) {,cache->numSets的值没有设置。 -
您在
malloc中使用numSets,但在循环条件子句中使用cache->numSets。后者可能没有正确设置(例如)在malloc之后,做:cache->numSets = numSets; -
你的代码可能是一个例子,为什么你不应该在
typedef中隐藏指针类型 -
如果有人无法使用您当前发布的“sn-ps”复制错误,那么您可能需要考虑通过编辑您的问题来更新您的代码。这很响亮,有助于其他人更快地发现错误。问题从“问题分类”发送到“需要编辑”。尽情享受吧 ;-)
标签: c caching segmentation-fault