Seg Fault现在我已经使我的结构数组成为全局

时间:2016-12-10 23:35:24

标签: c arrays struct malloc global-variables

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

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

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

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

但是由于查看文件我必须适应与缓存相关的函数,我意识到没有需要使用缓存的函数会将它放在其范围内,我无法编辑它们,所以我决定避免这种情况的唯一方法是将我的缓存范围扩大为全局。

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

我不确定如何解决这个问题。因为我正在使用C,所以我不能malloc主函数之外的全局,因为它给我一个“初始化器不是常数”错误,并且摆弄指针让我犯了更糟糕的错误。更重要的是,对于我来说,这种宣言/实体化在结构方面似乎几乎完全相同。

是什么导致这种不稳定性不起作用?有什么方法可以解决它,还是我的实现注定了?

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

1 个答案:

答案 0 :(得分:0)

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

*之前放置cache,您正在引用cache指向的另一个指针。

正确的代码:

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