У меня есть желание взять одно случайное натуральное число и распечатать гипотезу collatz от последнего номера до ввода. Шаги к гипотезе collatz: (a) Начните с любого положительного целого N. (b) Если N нечетно, умножьте его на 3 и добавьте 1. (т.е. N ← 3N + 1) (c) Если N четное, разделите его на 2. (т. е. N ← N/2) (d) Повторите. и он всегда заканчивается на 4 -> 2-> 1-> 4-> 2-> 1 ... Мой компьютер сообщает мне, что (projectname) .exe перестает работать после ввода целого числа.realloc, динамическое распределение памяти
Наиболее важным моментом является то, что мы должны выделить пространство для гипотезы и удвоить его, если оно используется полностью.
Мой код:
int main()
{
unsigned long int input =0;
int max =16;
long int *collatz;
collatz = malloc(max*sizeof(long int));
long int *n = NULL;
long int *u = NULL;
int counter=0;
printf("Please enter a natural number:");
scanf("%lu", input);
printf("%lu\n",input);
if (input <1)
{
printf ("ERROR, not a natural number");
return 1;
}
n = collatz;
*n = input;
while (*n!=1)
{
if (counter == max)
{
max = max*2;
collatz = realloc (collatz,max*sizeof(long int));
}
if ((*n)%2 == 1)
{
*n=(3*(*n))+1;
}
else if ((*n)%2 == 0)
{
*n=(*n)/2;
}
*u=*n;
n=n+1;
*n=*u;
counter++;
int *i =0;
for (i=n;*i!=input;i--)
{
printf("%lu\t",*i);
}
}
return 0;
}
Я предполагаю, что я получил перераспределить так, большинство других вещей не большая мистерия для меня (это не означает, что нет никаких ошибок, thereprobably являются).
Благодарим за помощь!
Никогда не делайте 'x = realloc (x, ...);' – 0andriy
почему? Нам было предложено использовать его ... @ 0andriy –
Просто подумайте об этом. Это легко исправить. Ваш код содержит серьезную ошибку прямо сейчас. – 0andriy