2013-10-26 71 views
1

當我想運行下面的代碼時,出現以下錯誤。使用指針添加數字

Enter number1 
4 
Segmentation fault (core dumped) 


#include<stdio.h> 
#include<stdlib.h> 

int main() 
{ 
    int *p1;int *p2; 
    int n; 
    printf("Enter number1\n"); 
    scanf("%d",p1); 
    printf("Enter number2\n"); 
    scanf("%d",p2); 
    printf("sum:%d\n", (*p1 + *p2)); 
    return 0; 
} 
+4

您沒有爲指針分配內存。爲什麼不使用'int'? – Kunal

+1

'p1'和'p2'是單位化指針。未定義的行爲。 –

+0

@ user2923786我剛剛發佈了您需要的更正。除非你必須使用指針,否則我會建議使用堆棧分配的整數作爲其他答案。 –

回答

0

scanf調用會導致不確定的行爲 - 你傳遞未初始化的指針。你的意思可能是這樣的:

int p1, p2; 

... 

scanf("%d", &p1); 

... 

scanf("%d", &p2); 

printf("sum:%d\n", p1 + p2); 
0

你的指針是未初始化的。在使用之前爲它們分配內存,否則它是未定義的行爲。

p1 = malloc(sizeof(int)); 
p2 = malloc(sizeof(int)); 

更妙的是,只使用int,而不是int *

int p1, p2; 
int n; 
printf("Enter number1\n"); 
scanf("%d",&p1); 
printf("Enter number2\n"); 
scanf("%d",&p2); 
+0

謝謝....我想用指針來添加數字...使用malloc後代碼工作正常..再次感謝.. – user2923786

+0

@ user2923786不客氣。請接受答案,如果它的工作:) – Kunal

1

這些指針沒有初始化:

int *p1;int *p2; 

...因此,他們沒有任何的內存分配對他們而言,他們無法知道他們所指的地方。

scanf希望能夠寫入這些位置。您應該改用int p1; int p2;以及這些地址傳遞給scanf

scanf("%d", &p1); 
0

只要使用正規的整型,不是指針(這裏沒有必要)。

#include<stdio.h> 

int main() 
{ 
    int p1;int p2; 
    int n; 
    printf("Enter number1\n"); 
    scanf("%d",&p1); 
    printf("Enter number2\n"); 
    scanf("%d",&p2); 
    printf("sum:%d\n", (p1 + p2)); 
    return 0; 
} 
2

發生在你的代碼包括:改變聲明爲int,而不是* int和使用&傳遞指針這些變量:

#include<stdio.h> 
#include<stdlib.h> 

int main() 
{ 
int p1;int p2; 
int n; 
printf("Enter number1\n"); 
scanf("%d",&p1); 
printf("Enter number2\n"); 
scanf("%d",&p2); 
printf("sum:%d\n", (p1 + p2)); 
return 0; 
} 
0

詮釋* P1是一個指向整數。你永遠不會初始化它,所以它會被定位到內存中的一個「隨機」位置。當您嘗試將scanf()寫入p2時,您正在寫入p1碰巧指向的任何位置。由於p1指向無效的位置,因此會出現未定義的行爲。在這種情況下,由於p1點位於分配空間之外的位置,會出現seg故障。

你可以通過爲p1分配內存來解決這個問題。事端glike ...

int *p1 = malloc(sizeof(int)); 

也可以使P1只是一個int,而不是一個指向int和指針傳遞到P1,當你czll scanf函數...

int p1; 
... 
scanf(...,&p1); 
1

無論出於何種你想使用指針(因此使用動態分配的內存)。分配內存並初始化指針:

#include<stdio.h> 
#include<stdlib.h> 

int main() 
{ 
int *p1;int *p2; 
int n; 

p1=malloc(sizeof(int)); 
p2=malloc(sizeof(int)); 

printf("Enter number1\n"); 
scanf("%d",p1); 
printf("Enter number2\n"); 
scanf("%d",p2); 
printf("sum:%d\n", (*p1 + *p2)); 
return 0; 
}