Why am I getting segmentation fault here?
#include <stdio.h>
int main() {
printf("enter the first number: ");
int a;
scanf("%d\n",a);
int *pa = &a;
printf("enter the second number: ");
int b;
scanf("%d\n",b);
int *pb = &b;
int *sum = *pa + *pb;
printf("the sum of the given numbers is %d\n", sum);
return 0;
}
Tried rearranging the variables but still getting the same error
>Solution :
Given both int a
and int b
, the respective calls to scanf
should use the addresses of each variable, e.g., scanf("%d", &a);
.
Alternatively, use the pointers you have created, e.g., scanf("%d", pb);
.
See also: What is the effect of trailing white space in a scanf() format string?
In
int *sum = *pa + *pb;
*pa + *pb
is the addition of two integer values, yielding an int
, which is then converted to a pointer value of type int *
and assigned to sum
.
In
printf("the sum of the given numbers is %d\n", sum);
the variadic argument associated with %d
must be an int
(or otherise be subject to an integer promotion that yields an int
), but you pass an int *
instead. This invokes undefined behaviour.
To fix both issues, int *sum
should be int sum
.