c - C 中的指针及其值

标签 c pointers cygwin

好吧,我必须创建这个程序的一部分,它基本上是一个游戏,其中创建了一个 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);

当然,调用函数时abc必须指向有效内存

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/

相关文章:

c - GTK+-3.0-dev 编译时没有这样的文件或目录 (Linux Mint/gcc)

c++ - 访问指针句柄中对象的地址

c++ - 如何避免不必要的数据复制?

linux - 执行 if...then...fi 时出现 Cygwin 错误 - Bash 脚本

ruby 1.92 错误的解释器 : permission denied

c - OpenMPI 不从数组发送数据

c - 单击按钮后,为什么我的窗口卡住了?

改变流程的能力

c - 如何在 C 中将 union 指针作为参数传递? union 的内部是什么?

cygwin下调用winapi编译链接静态库