Где указатели без точек инициализации? - PullRequest
0 голосов
/ 01 декабря 2018
#include <stdio.h>

int main()
{
    int *b;
    int *a;
    a[1] = 99;
    printf("%p", a);
    return 0;
}

Почему этот код завершается с ошибкой segfault: Процесс завершен с кодом завершения 11

#include <stdio.h>
int main()
{
    //int *b;
    int *a;
    a[1] = 99;
    printf("%p", a);
    return 0;
}

И этот код печатает и адрес указателя? 0x7fff58162a40 Как работает [1] = 99, если я не инициализировал указатель a?Компиляция с GCC на Mac OS Sierra, если это имеет значение.

1 Ответ

0 голосов
/ 01 декабря 2018

Доступ к неинициализированным переменным и / или запись в объект / массив, для которого вы не запрашивали память, является неопределенным поведением.«Не определено» означает, что все может произойти, даже если программа, кажется, «работает», как вы и предполагали.

На самом деле обе программы делают обе;если один из них «работает», то это какая-то удача (хорошо или плохо, вы можете решить).

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