重新初始化全局指针数组

问题描述 投票:-1回答:1

我有一个结构type,我想初始化一个指向此指针的全局数组。因此,我做了static block_t *list_array[9] = {NULL};并将其初始化为null。

预计该程序将被重复调用,这意味着必须重新初始化全局变量,因此当我在初始化函数中再次设置static block_t *list_array[9] = {NULL};时,我得到了一个编译器警告,提示“未使用的变量”,因此我无法t找出问题所在。

因此,我尝试遍历数组并将每个数组都设置为NULL-->

    for (int i = 0; i <= 8; i++) {
        list_array[i] = NULL;
    }

现在的问题是,在初始化函数的范围内,这可以正常工作,但是当我尝试在另一个函数中访问此list_array时,它给出一个错误,提示cannot access memory at ....

该声明位于文件级别,我正在尝试在同一文件本身中访问它。

static block_t *list_array[9] = {NULL};

bool mm_init(void) {
 /* some code has been removed because not relevant*/
    for (int i = 0; i <= 8; i++) {
        list_array[i] = NULL;
    }

    return true;
}

现在当我尝试使用其他功能访问list_array[i]时,>]

static block_t *find_bucket(size_t bucket_size) {
    block_t *free_start;
    for (int i = 0; i <= 7; i++) {
        if (bucket_size <= (size_t)buckets[i]) {
            free_start = list_array[i];
            return free_start;
        }
    }

    free_start = list_array[8];
    return free_start;
}

我一步步调试器,当我尝试p list_array[0]时,它给我一个错误,提示cannot access memory at 0x0,但如果我在mm_init中执行了同样的操作,则它会显示(block_t*) 0x0

我有一个结构类型,我想初始化一个指向它的全局指针数组。所以我做了static block_t * list_array [9] = {NULL};声明并将其初始化为null。该程序是...

c pointers struct global
1个回答
0
投票
    for (size_t i = 0; i <= 8; i++) {
        list_array[i] = NULL;
    }

此方法有效。

© www.soinside.com 2019 - 2024. All rights reserved.