C 使用指针添加数字
当我想运行下面的代码时,我得到了以下错误C 使用指针添加数字,c,pointers,C,Pointers,当我想运行下面的代码时,我得到了以下错误 Enter number1 4 Segmentation fault (core dumped) #包括 #包括 int main() { int*p1;int*p2; int n; printf(“输入数字1\n”); scanf(“%d”,p1); printf(“输入数字2\n”); scanf(“%d”,p2); printf(“总和:%d\n”,(*p1+*p2)); 返回0; } 您的scanf调用会导致未定义的行为-您正在传递未初始化的
Enter number1
4
Segmentation fault (core dumped)
#包括
#包括
int main()
{
int*p1;int*p2;
int n;
printf(“输入数字1\n”);
scanf(“%d”,p1);
printf(“输入数字2\n”);
scanf(“%d”,p2);
printf(“总和:%d\n”,(*p1+*p2));
返回0;
}
您的scanf
调用会导致未定义的行为-您正在传递未初始化的指针。你的意思可能是:
int p1, p2;
...
scanf("%d", &p1);
...
scanf("%d", &p2);
printf("sum:%d\n", p1 + p2);
您的
scanf
调用会导致未定义的行为-您正在传递未初始化的指针。你的意思可能是:
int p1, p2;
...
scanf("%d", &p1);
...
scanf("%d", &p2);
printf("sum:%d\n", p1 + p2);
您的指针未初始化。在使用之前为它们分配内存,否则这是未定义的行为
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);
您的指针未初始化。在使用之前为它们分配内存,否则这是未定义的行为
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);
这些指针未初始化:
int *p1;int *p2;
…因此,它们没有分配任何内存,也无法知道它们指向何处
scanf
希望能够写入这些位置。您应该改为使用intp1;int p2
并将这些文件的地址传递给scanf
:
scanf("%d", &p1);
这些指针未初始化:
int *p1;int *p2;
…因此,它们没有分配任何内存,也无法知道它们指向何处
scanf
希望能够写入这些位置。您应该改为使用intp1;int p2
并将这些文件的地址传递给scanf
:
scanf("%d", &p1);
只需使用常规int,而不是指针(此处不需要)
#包括
int main()
{
int p1;int p2;
int n;
printf(“输入数字1\n”);
scanf(“%d”和&p1);
printf(“输入数字2\n”);
scanf(“%d”和&p2);
printf(“总和:%d\n”,(p1+p2));
返回0;
}
只需使用常规int,而不是指针(此处不需要)
#包括
int main()
{
int p1;int p2;
int n;
printf(“输入数字1\n”);
scanf(“%d”和&p1);
printf(“输入数字2\n”);
scanf(“%d”和&p2);
printf(“总和:%d\n”,(p1+p2));
返回0;
}
代码中的更改包括将声明更改为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;
}
#包括
#包括
int main()
{
int p1;int p2;
int n;
printf(“输入数字1\n”);
scanf(“%d”和&p1);
printf(“输入数字2\n”);
scanf(“%d”和&p2);
printf(“总和:%d\n”,(p1+p2));
返回0;
}
代码中的更改包括将声明更改为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;
}
#包括
#包括
int main()
{
int p1;int p2;
int n;
printf(“输入数字1\n”);
scanf(“%d”和&p1);
printf(“输入数字2\n”);
scanf(“%d”和&p2);
printf(“总和:%d\n”,(p1+p2));
返回0;
}
Int*p1是指向整数的指针。您从不初始化它,因此它会指向内存中的“随机”位置。当您尝试将f()扫描到p2时,您正在写入p1恰好指向的任何位置。由于p1指向一个无效的位置,因此您会得到未定义的行为。在这种情况下,会出现seg故障,因为p1点的位置超出了分配的空间
您可以通过为p1分配内存来解决此问题。有点像格里克
int *p1 = malloc(sizeof(int));
或者您可以使p1只是一个int而不是指向int的指针,并在czll扫描时将指针传递给p1
int p1;
...
scanf(...,&p1);
Int*p1是指向整数的指针。您从不初始化它,因此它会指向内存中的“随机”位置。当您尝试将f()扫描到p2时,您正在写入p1恰好指向的任何位置。由于p1指向一个无效的位置,因此您会得到未定义的行为。在这种情况下,会出现seg故障,因为p1点的位置超出了分配的空间 您可以通过为p1分配内存来解决此问题。有点像格里克
int *p1 = malloc(sizeof(int));
或者您可以使p1只是一个int而不是指向int的指针,并在czll扫描时将指针传递给p1
int p1;
...
scanf(...,&p1);
对于您想要使用指针的任何东西(因此使用动态分配的内存)。分配内存并初始化指针:
#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;
}
#包括
#包括
int main()
{
int*p1;int*p2;
int n;
p1=malloc(sizeof(int));
p2=malloc(sizeof(int));
printf(“输入数字1\n”);
scanf(“%d”,p1);
printf(“输入数字2\n”);
scanf(“%d”,p2);
printf(“总和:%d\n”,(*p1+*p2));
返回0;
}
用于任何您想要使用指针(从而使用动态分配的内存)的对象。分配内存并初始化指针:
#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;
}
#包括
#包括
int main()
{
int*p1;int*p2;
int n;
p1=malloc(sizeof(int));
p2=malloc(sizeof(int));
printf(“输入数字1\n”);
scanf(“%d”,p1);
printf(“输入数字2\n”);
scanf(“%d”,p2);
printf(“总和:%d\n”,(*p1+*p2));
返回0;
}
您没有为指针分配内存。为什么不直接使用int
?p1
和p2
是统一的指针。未定义的行为。@user2923786我刚刚发布了您需要的更正。除非您必须使用指针,否则我建议使用堆栈分配的整数作为其他答案。您没有为指针分配内存。为什么不直接使用int
?p1
和p2
是统一的指针。未定义的行为。@user2923786我刚刚发布了您需要的更正。除非您必须使用指针,否则我建议使用堆栈分配的整数作为其他答案。谢谢您…我想使用指针添加数字…使用malloc后,代码工作正常..再次感谢..@user2923786不客气。如果有效,请接受答案:)谢谢…我想使用指针添加数字…使用malloc后,代码工作正常..再次感谢..@user2923786不客气。如果答案有效,请接受:)