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

7 回答 7

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;
} 
于 2013-10-26T20:31:46.637 回答
1

这些指针未初始化:

int *p1;int *p2;

...因此,它们没有分配任何内存,也无法知道它们指向的位置。

scanf期望能够写入这些位置。您应该改为使用int p1; int p2;并将这些地址传递给scanf

scanf("%d", &p1);
于 2013-10-26T20:29:33.747 回答
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;
}
于 2013-10-26T21:45:04.130 回答
0

Int *p1 是一个指向整数的指针。您永远不会初始化它,因此它会指向内存中的“随机”位置。当您尝试将 scanf() 写入 p2 时,您正在写入 p1 碰巧指向的任何地方。由于 p1 指向一个无效的位置,你会得到未定义的行为。在这种情况下,您会遇到段错误,因为 p1 指向的位置超出了分配的空间。

您可以通过为 p1 分配内存来解决此问题。就像是...

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

或者您可以使 p1 只是一个 int 而不是指向 int 的指针,并在您 czll scanf 时将指针传递给 p1 ...

int p1;
...
scanf(...,&p1);
于 2013-10-26T20:33:21.197 回答
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;
}
于 2013-10-26T20:30:41.690 回答
0

您的scanf调用会导致未定义的行为 - 您正在传递未初始化的指针。你的意思可能是这样的:

int p1, p2;

...

scanf("%d", &p1);

...

scanf("%d", &p2);

printf("sum:%d\n", p1 + p2);
于 2013-10-26T20:28:51.473 回答
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);
于 2013-10-26T20:29:24.913 回答