我正在尝试编写一个程序,当给定一个特定的价格时,它将把它分成 20s、10s、5s 和 1s。
但是,我收到以下错误:EXC_BAD_ACCESS (code=1, address=0x0)
错误出现在函数中的行:*tens=diff
。
我不明白哪里出了问题!
代码如下:
#include<stdio.h>
#include<stdlib.h>
void pay_month(int , int *, int *, int *, int *);
int main(){
int dollars, *twenties=0, *tens=0, *fives=0, *ones=0;
printf("enter amount to pay: ");
scanf("%d",&dollars);
pay_month(dollars, twenties, tens, fives, ones);
return 0;
}
void pay_month(int dollars, int *twenties, int *tens, int *fives, int
*ones){
int diff=0;
int odolls;
odolls=dollars;
while(dollars%20!=0){
dollars=dollars-1;
diff++;
}
*tens=diff;
*twenties=dollars/20;
diff=0;
while(*tens%10!=0){
*tens=*tens-1;
diff++;
}
*tens=*tens/10;
*fives=diff;
diff=0;
while(*fives%5!=0){
*fives=*fives-1;
diff++;
}
*ones=diff;
diff=0;
while(*ones%1!=0){
*ones=*ones-1;
diff++;
}
printf("in %d there is %d twentis %d tens %d fives and %d ones\n",odolls, *twenties, *tens, *fives, *ones);
}
最佳答案
您正在取消引用 NULL 指针。也就是说,您要求计算机写入内存位置 0
。你不能这样做。
我认为您所做的是在不完全了解如何获取指针的情况下使用了指针。可能只是为了阻止编译器抛出错误。
这个简单的更改应该可以解决问题:
int dollars, twenties=0, tens=0, fives=0, ones=0;
printf("enter amount to pay: ");
scanf("%d",&dollars);
pay_month(dollars, &twenties, &tens, &fives, &ones);
请注意,调用函数中的所有值都不再是指针。它们只是整数。在将它们传递给 pay_month
时,您可以使用 &
作为前缀。这就是 reference 运算符,它获取指向值存储位置的指针。
现在,当您取消引用 pay_month
中的 tens
指针时,您实际上访问的是 tens
值所在的同一内存部分存储在 main
中的堆栈中。
关于c - 为什么我得到 EXC_BAD_ACCESS(代码=1,地址=0x0)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47320818/