вы берете адреса локальных переменных, чтобы хранить их в переменных локального указателя (вне зависимости от функции, оператор 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
, не инициализирован, , но не записан должным образом из-за вашей другой ошибки, программа вылетает с неопределенное поведение при попытке напечатать значение.
Чтобы исправить это, в вашем контексте:
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);