我的C程序崩溃了

时间:2014-04-17 05:56:21

标签: c function crash

这是一个简单的程序,输入两个数字,打印出来,然后使用

功能改变改变x和y并在main中打印出来但由于某种原因它

不会打印出“输入两个数字”,我无论如何都可以输入两个数字

输入第二个号码后崩溃,谁能告诉我我做错了什么?

#include <stdio.h>
#include <stdlib.h>

main()
{
  int x, y;
  puts("Enter two numbers ");
  scanf("%d",&x);
  scanf("%d",&y);
  void alter(int*,int*);

  printf("Before alter x = %d  y = %d\n",x,y);
  alter(x,y);
  printf("After alter x = %d  y = %d\n",x,y);
}
void alter(int* x, int* y)
{
  *x = *x+*y;
  *y = *x**y;
}

5 个答案:

答案 0 :(得分:2)

函数alter()有两个整数pointers作为parameter。因此,当你调用函数时,你必须提供两个地址作为参数,否则会出现runtime error和放大器;这就是你的程序崩溃的原因。你应该写:

 alter(&x,&y);

而不是

 alter(x,y)

因为您的函数的参数是:

 int* x, int* y

答案 1 :(得分:0)

更改

puts("Enter two numbers ");

puts("Enter two numbers \n");

\n刷新输出流,以便在控制台上打印字符串。

更改

alter(x,y);

alter(&x,&y);

因为您的功能需要int *而不是int

答案 2 :(得分:0)

编译代码时。编译器为您的问题提供警告

user1.c: In function ‘main’:
user1.c:13:3: warning: passing argument 1 of ‘alter’ makes pointer from integer without a cast
user1.c:10:8: note: expected ‘int *’ but argument is of type ‘int’
user1.c:13:3: warning: passing argument 2 of ‘alter’ makes pointer from integer without a cast
user1.c:10:8: note: expected ‘int *’ but argument is of type ‘int’

始终查看编译器警告。它可以帮助你克服这个问题。

这里alter()将指针作为参数,你给出了pass by value变量,所以给出了崩溃

将其更正为

alter(&x,&y);

答案 3 :(得分:0)

alter(x,y);

应该是

alter(&x,&y);

答案 4 :(得分:0)

由于您使用的是传递变量地址而不是其值的指针,因此您必须将xy的地址发送到void alter(int* x, int* y)而不是x的值}和y本身。因此,将函数调用从alter(x,y);(将值传递给被调用函数)更改为alter(&x,&y);(仅将变量xy的地址传递给指针)< / p>