Скажем, вы выделили достаточно места в памяти для хранения массива размером 20. Программа работает, и теперь мне нужно достаточно памяти для массива размером, скажем, 40. Я пытался сделать это с помощью realloc, но, похоже, это не работает. Мой код следующий (я пытаюсь найти сумму всех четных членов фибоначчи ниже 4 миллионов):
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char** argv){
int i,sum,size;
int *fibo;
size = 20; //initial size of array
fibo = (int *) malloc(size*sizeof(int));
fibo[0]=1;
fibo[1]=1;
i=2;
sum=0;
while(fibo[i-1]<4000000){
fibo[i] = fibo[i-1]+fibo[i-2];
printf("fibo[%d] = %d\n", i, fibo[i]);
if(fibo[i]%2 == 0){
sum+= fibo[i];
}
i++;
if(i>size){
fibo = (int *) realloc(fibo, (size *= 2)*sizeof(int));
}
}
printf("Sum = %d\n", sum);
return 0;
}
Кто-нибудь знает, почему realloc терпит неудачу, и как я могу это исправить?
realloc
терпит неудачу (а не что-то еще)? Какой симптом вы наблюдаете? - person psmears   schedule 27.01.2015if (i == size)
. Больше никогда не должно становиться возможным, или вы уже вызываете неопределенное поведение. - person WhozCraig   schedule 27.01.2015==
преуспевает там, где>=
терпит неудачу? В этой ситуации они фактически эквивалентны, не так ли? - person psmears   schedule 27.01.2015if (i == size)
, это интересная мысль. Вы знаете, где это обсуждалось? Не хочу начинать священную войну здесь, но хотел бы здесь за/против этого. - person chux - Reinstate Monica   schedule 27.01.2015malloc()
? - person chux - Reinstate Monica   schedule 27.01.2015malloc()
, так иrealloc()
; вот и подняли тему. - person psmears   schedule 27.01.2015==
верно, а>=
нет. Моя точка зрения заключалась в том, что инструкция>=
будет другой (jne
противjl
) и не принесет никакой пользы. Учитывая код операции, единственный способ, которым больше, чем может вступить в игру, означает, что предыдущие методы доступа уже вызвали UB, и начинается дождь из кошек. Покрытие всех основ сплошным открытым диапазоном, чего никогда не должно происходить, может не повлиять на рабочий код, но читатель кода вполне может поверить, чтоi
может стать лучше , что, по общему мнению, просто не может произойти и оставаться в сфере определенного поведения. - person WhozCraig   schedule 27.01.2015malloc()
результатов. - person chux - Reinstate Monica   schedule 27.01.2015