Рекурсия и указатели
Пишу одну рекурсивную функцию на C и решил вместо глобальной переменной, которая бы отвечала за остановку данной функции передавать в аргументе указатель на булеву переменную. Решил потренироваться на более простом примере:
#include <stdio.h>
#include <stdlib.h>
int f(short unsigned int* q, short unsigned int N){
if (N >= 5 || *q > 10){
return 0;
}
else{
*q = 1 + f(q, N+1);
return *q;
}
}
int main()
{
short unsigned int* q;
*q = 1;
f(q, 1);
printf("%u", *q);
}
Однако, программа не работает (В функции main я далее вывожу содержимое по адресу указателя, но в консоль программа ничего не выводит, а процесс завершается кодом -1073741819 (0xC0000005)). Помогите разобраться, в чём тут дело
Ответы (1 шт):
Проблема вот тут:
short unsigned int* q;
*q = 1;
Вы неверно поняли работу с указателями - память под указатель нужно сперва зарезервировать, чего вы не делаете. Отсюда неопределенное поведение и все остальные эффекты.
Исправить можно как-то так:
int main()
{
short unsigned int q = 1;
f(&q, 1);
printf("%u", q);
}
Здесь важно понимать, что мы берем память на стеке под переменную q, после чего используем указатель на нее в функции.