Базовая программа на языке Си перестала работать: как раз вовремя отладчик
В данный момент я изучаю C и скопировал следующее из wibit.com:
#include <stdio.h>
int main()
{
    int* n;
    *n = 20;
    printf("%in", *n);
    return 0;
}
Я использую GCC и компилирую и запускаю в командной строке примерно так:
gcc prgrm.c -o prgrm.exe    #compiles without any errors
prgrm.exe
Затем появляется сообщение об ошибке prgrm.exe перестал работать. Я нажимаю кнопку отладка и получаю следующее:

Все мои программы запускались раньше, и я протестировал его с помощью еще нескольких (просто верните 0; или printf (и т. д...)) и они работают!
Есть идеи? спасибо
1 ответ:
int* n;Объявляет указатель на
int. У него нет назначенного адреса, поэтому он указывает на произвольный адрес в памяти. Этот адрес почти наверняка не будет доступен для записи. Даже если он был записан, это не ваша память, поэтому вы не знаете, каковы будут последствия записи.*n = 20;Пытается написать на этот непредсказуемый адрес. Это приводит к неопределенному поведению. Сбой-это допустимый (и полезный) тип неопределенного поведения.
Чтобы ваша программа работала, вам нужно выделить хранение для
n. Вы можете сделать это на стекеint n; n = 20; printf("%i\n", n);Или динамически в куче
Обратите внимание, что компилятор предупредил бы вас об этом использовании неинициализированной переменной, если бы вы включили предупреждения для своей сборки. Добавьтеint* n = malloc(sizeof(*n)); if (n == NULL) { printf("Error: out of memory\n"); return -1; } *n = 20; printf("%i\n", *n); free(n);-Wallв командную строку для gcc или/W4для MSVC, чтобы включить эту функцию.