c - 为什么我得到 EXC_BAD_ACCESS(代码=1,地址=0x0)?

标签 c xcode

我正在尝试编写一个程序,当给定一个特定的价格时,它将把它分成 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/

相关文章:

ios - 从 SKNode 访问 SKView 方法

c - 限制套接字并发连接数

c - 在 C 中访问结构体中的结构体

将 double(不是指针)转换为 void 指针

c - BSD C 服务器不比较缓冲区中的字符串

ios - 隐藏 iOS 键盘预测文本栏 - UITextView/UITextField

ios - FMDB 没有显示任何内容 - swift

ios - 可变类型 'NSMutableDictionary' 的属性具有 'copy' 属性;将存储一个不可变对象(immutable对象)

ios - 如何在 iOS 设备上打开 iOS 应用程序调试期间创建的 txt 文件

php - 雅虎财经数据查询计数和效率