scanf и указывает на ошибку сегментации int * - PullRequest
0 голосов
/ 19 ноября 2011

Я называю свою программу, и она должна прочитать целую кучу целых чисел со стандартного ввода

int main() {
    int* s;
    derp(s);
    return 0;
}

void derp(int *size) {
    scanf("%d", size);
}

почему этот код вызывает ошибку сегментации?

Ответы [ 3 ]

9 голосов
/ 19 ноября 2011
int* s;
derp(s);

На что указывает s?Для случайного мусора памяти, так как его не инициализируется.Вместо этого вы должны сделать это:

int s;
derp(&s);

или вы можете выделить место для хранения, используя malloc:

int* s = malloc( sizeof(int) );
derp(s);
free(s);
3 голосов
/ 19 ноября 2011

Потому что вам нужно инициализировать s.

Добавить это:

s = malloc(sizeof(int));

Не забудьте free(s), когда вы закончите.

0 голосов
/ 19 ноября 2011

s нужно инициализировать с помощью malloc (). Как и сейчас, s указывает на какую-то случайную чушь где-то в памяти.

...