2014-10-14 5 views
0

Это моя программа:Зачем нужна эта программа?

#include<stdio.h> 
int main() 
{ 
    int *n; 
    int var; 
    scanf("%d",n); 
    printf("%d",*n); 

} 

в scanf сохраняет значение по указанному адресу я даю адрес .Затем я пытаюсь напечатать значение по адресу, но его дает Segfault.

ответ

2

Вы должны выделить память для указателей, как это:

int* n = (int*)malloc(sizeof(int)) 
+0

Спасибо большое! Мне нужно сначала выделить память. – user3870509

+0

вы используете необработанный указатель, который не указывает на то, где –

+0

http://stackoverflow.com/questions/605845/do-i-cast-the-result-of-malloc/605858#605858 –

2

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

Если вы вместо того, чтобы сделать следующее, код будет работать:

#include <stdio.h> 
int main() 
{ 
    int n; 
    scanf("%d", &n); 
    printf("%d", n); 
} 
+0

+1 для упрощения и более очевидно, чем 'malloc'. –

0

вар n является указателем, и вы не таНос для него память.

Смежные вопросы