c语言 - Seg 错误,现在我已经将我的结构数组设置为全局



(我知道使用全局变量通常不是一个好主意,但我的实验室结构方式让我相信这是必需的。

基本上,我应该模拟缓存,并且我决定使缓存成为链表数组,其中每个节点都是一个名为"block"的结构,其中包含地址和有效指标等信息。

在我的原始代码中,我有(工作)声明:

struct block **cache = malloc(sizeof(struct block)*numofsets); 

但是自从查看我必须适合缓存相关函数的文件后,我意识到需要使用缓存的函数都不会在其范围内使用它,并且我无法编辑它们,所以我决定避免这种情况的唯一方法是增加缓存的范围以成为全局。

当我把声明struct block **cache;放在主之外时,主要问题就来了,*cache = malloc(sizeof(struct block)*numofsets);放在主。当我运行我的代码时,它有一个 seg 错误。我使用打印语句来查找 seg 错误的来源,而malloc行是罪魁祸首。

我不太确定如何解决这个问题。由于我使用的是 C,因此我无法在 main 函数之外malloc全局,因为它给了我一个"初始值设定项不是常量"错误,并且摆弄指针让我犯了更严重的错误。更重要的是,对我来说,这种声明/实例化在结构上似乎与以前几乎相同。

是什么导致这种实例化不起作用?有什么方法可以修复它,还是我的实现注定要失败?

编辑:我一直在玩弄它,我已经意识到问题不在于它是一个全局变量,而是由于某种原因将声明与初始化分开给了我一个 seg 错误。不知道为什么会这样。

*cache = malloc(sizeof(struct block)*numofsets);  

*放在cache之前,您指的是cache指向的另一个指针。

正确的代码:

cache = malloc(sizeof(struct block)*numofsets);

相关内容

  • 没有找到相关文章

最新更新