Повторная инициализация глобального массива указателей - PullRequest
0 голосов
/ 24 марта 2020

У меня есть структура type, и я хочу инициализировать глобальный массив указателей на это. Поэтому я сделал static block_t *list_array[9] = {NULL};, чтобы объявить и инициализировать его также как null.

Ожидается, что программа будет вызываться повторно, что означает, что глобальные переменные должны быть повторно инициализированы, поэтому, когда я установил static block_t *list_array[9] = {NULL}; снова в функции инициализации я получил предупреждение компилятора, говорящее «Неиспользуемая переменная», поэтому я не мог понять, в чем проблема.

Итак, я попытался перебрать массив и установить для каждого из них значение 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

1 Ответ

0 голосов
/ 26 марта 2020
    for (size_t i = 0; i <= 8; i++) {
        list_array[i] = NULL;
    }

это сработало.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...