У меня есть структура 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