我对 C 编码还很陌生,而指针是我遇到很多麻烦的东西。我正在尝试编写一个程序,该程序接受两个指针作为参数,将第一个指针的值添加到第二个指针,然后返回第一个指针的值。我写的是这样的:
int foo(int *g, int *h)
{
int a;
a = *g;
*h += a;
return a;
}
但是,我在使用在线编译器时遇到段错误错误。我读到这些是由流氓指针引起的,但我不确定错误在哪里。有人可以帮忙吗?
编辑: 我这样调用这个函数:
main()
{
int* x;
*x = 3;
int* y;
*y = 4;
int z = foo(x, y);
printf("%d", z);
}
我认为这就是声明指针的方法,而使用 (*) 取消引用它就是如何为其赋值。难道我说的不对吗?
最佳答案
在main
中,您必须先为x
和y
分配空间,然后才能使用它。如果x
和y
没有分配空间,它们就指向任意内存位置。如果它们在您的程序段之外,您将遇到段错误。
main()
{
int* x=malloc(sizeof(int));
*x = 3;
int* y=malloc(sizeof(int));
*y = 4;
int z = fun(x, y);
printf("%d", z);
}
或者像这样:
main()
{
int x=3,y=4;
int z = fun(&x, &y);
printf("%d", z);
}
关于c - 段错误、指针问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22152126/