当我想运行以下代码时,我收到以下错误。
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;
}
答案 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;
}
答案 1 :(得分:1)
这些指针未初始化:
int *p1;int *p2;
...因此,他们没有分配给他们的任何记忆,也无法知道他们指向的地方。
scanf
希望能够写入这些位置。您应该使用int p1; int p2;
并将这些地址传递给scanf
:
scanf("%d", &p1);
答案 2 :(得分: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;
}
答案 3 :(得分:0)
您的scanf
调用会导致未定义的行为 - 您正在传递未初始化的指针。你的意思可能是:
int p1, p2;
...
scanf("%d", &p1);
...
scanf("%d", &p2);
printf("sum:%d\n", p1 + p2);
答案 4 :(得分: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);
答案 5 :(得分:0)
只需使用常规int,而不是指针(此处不需要)。
#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;
}
答案 6 :(得分:0)
Int * p1是一个指向整数的指针。你永远不会初始化它,所以指向内存中的“随机”位置。当您尝试将scan()转换为p2时,您正在写入p1恰好指向的位置。由于p1指向无效位置,因此您将获得未定义的行为。在这种情况下,您会得到一个seg错误,因为p1指向的位置在分配的空间之外。
您可以通过为p1分配内存来解决此问题。有点像......
int *p1 = malloc(sizeof(int));
或者你可以使p1只是一个int而不是指向int的指针,并在你czll scanf时将指针传递给p1 ...
int p1;
...
scanf(...,&p1);