Почему строка 3 выдает ошибку: использование неинициализированного значения размера 8? - PullRequest
0 голосов
/ 12 июля 2020

Я изучаю указатель в C. Я попытался позволить указателю b в update () указывать на целое число напрямую без int varibale (где-то в памяти, просто эксперимент), но когда я это сделал, он показывает ERROR: Use of uninitialised value of size 8. Я догадался, что компилятор, указанный b, инициализирован? Что делать, чтобы исправить?

void update(int *x){
  int *b;
  *b=16;
  printf("%d  ",*b);
}
int main() {
  int a=4l;
  int *b=&a;
  printf("%d  ",*b);
  update(&a);
  printf("%d",*b);
  return 0;
}

Спасибо ~

Ответы [ 2 ]

1 голос
/ 12 июля 2020

Ваш компилятор выдает ошибку, потому что вы пытаетесь использовать указатель, который никогда не был инициализирован.

'размера 8', скорее всего, означает, что ваша система использует 8-байтовый (64-битный) указатели.

Чтобы решить эту проблему, инициализируйте указатель на какое-нибудь действительное (или недействительное, если вы действительно предпочитаете) место в памяти.

0 голосов
/ 12 июля 2020

У вас есть указатель, но вы никогда не указываете его позицию, поэтому вы не можете присвоить значение. Вы можете решить эту проблему, инициализировав его сначала или зарезервировав динамическую c память.

В первом случае вы можете использовать это:

int i;
int *b = &i;//It gets the location of i and saves the value there
*b = 16;

И с динамической c памятью

int *b = (int*) malloc(sizeof(int));
//it reserves memory to store one int, malloc return the position of the memory you reserved
*b = 16;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...