好吧,我必须创建这个程序的一部分,它基本上是一个游戏,其中创建了一个 secret 数字,用户必须尝试猜测它,而我在它的指针方面遇到了一些麻烦。在我的“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);
}
最佳答案
您正在获取局部变量的地址并将它们存储在局部指针变量中(在函数外部没有任何影响,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);
我们看不到来电者的来电者,但既然你说:
I keep getting an error called "cygwin_exception::open_stackdumpfile:"
这可能是因为你的来电者(你没有出现)是这样的:
int *a,*b,*c;
imTrying(a,b,c);
由于a
指向的地址未初始化,但由于您的其他错误而未正确写入,因此程序因未定义的行为而崩溃 当您尝试打印该值时。
要在您的上下文中修复它:
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);
关于c - C 中的指针及其值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52882459/