好的,所以我必须创建该程序的一部分,它基本上是一个游戏,在其中创建了一个秘密号码,用户必须尝试猜测它,并且在指针方面我遇到了一些麻烦。在我的“ generate_secret_number”函数中,在打印指针的值时没有问题,但是在我的“ imTrying”函数中,当我调用generate_secret_number函数并尝试打印出指针的值时,我一直收到称为“ cygwin_exception”的错误:: open_stackdumpfile:“我希望有人可以对我做错的事情给予我一些见解,非常感谢!
void generate_secret_number(int *a, int *b, int *c)
{
int num1,num2,num3;
num1 = (rand() % 5) + 1;
num2 = (rand() % 6);
num3 = (rand() % 6);
a = &num1;
b = &num2;
c = &num3;
printf("the secret number is: %d%d%d", *a,*b,*c);
}
void imTrying(int *a, int *b, int *c)
{
int num1,num2,num3;
generate_secret_number(a,b,c);
printf("\n%d", *a);
}
答案 0 :(得分:4)
您正在获取局部变量的地址以将它们存储在局部指针变量中(无论在函数外部没有任何作用,printf
语句的工作都会增加幻觉)
a = &num1;
b = &num2;
c = &num3;
以正确的方式代替将其值复制到传递的引用变量中:
*a = num1;
*b = num2;
*c = num3;
(请注意,您可以避免使用num1
等)
*a = (rand() % 5) + 1;
*b = (rand() % 6);
*c = (rand() % 6);
当然,a
,b
和c
在调用函数时必须指向有效内存。
int num1,num2,num3;
generate_secret_number(&num1,&num2,&num3);
我们没有看到呼叫者的呼叫者,但是由于您说:
我不断收到一个错误,消息为“ cygwin_exception :: open_stackdumpfile:”
可能是因为您的来电者(您未显示)就像:
int *a,*b,*c;
imTrying(a,b,c);
由于a
所指向的地址未初始化,但是由于您的其他错误而未正确写入,因此,当出现以下错误时,程序将崩溃并显示 undefined behaviour 您正在尝试打印值。
要修复此问题,请根据您的情况:
void imTrying(int *a, int *b, int *c)
{
// int num1,num2,num3; // useless
generate_secret_number(a,b,c);
}
呼叫者:
int num1,num2,num3; // valid memory
imTrying(&num1,&num2,&num3);
printf("%d, %d, %d\n", num1,num2,num3);
答案 1 :(得分:0)
在
no
修改bar的值将毫无意义(无双关语)。 (指针的值是它保存的地址)。由于指针foo(int *bar)
{
bar = 0x42;
}
是调用bar
的地址的副本,因此foo()
之外的任何人都不会注意到foo()
发生了变化。
您想做的是也更改对象bar
的点:
bar