使用指针添加数字

时间:2013-10-26 20:26:24

标签: c pointers

当我想运行以下代码时,我收到以下错误。

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;
}

7 个答案:

答案 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);