2013-06-06 2 views
0

Я пытаюсь динамически увеличить память массива int. Однако у меня возникают проблемы с его работой. Он не расширяется и не добавляет больше элементов в массив, я не уверен, что я делаю неправильно. Пожалуйста, помогите!C realloc use

int* fibs = NULL; 

void genFibs(){ 
    int i = 1,curSize = 0,curNum = 0; 
    int flag = 1; 
    while(flag){ 
     if(curSize != 0 &&curSize != 1){ 
      curNum = fibs[curSize-2]+fibs[curSize-1]; 
     }else if(curSize-1 == 1){ 
      curNum = fibs[curSize-1]+fibs[curSize-1]; 
     }else{ 
      curNum = 1; 
     } 
     if(curNum<=10){ 
      curSize++; 
      fibs = (int*)realloc(fibs,curSize*sizeof(int)); 
      fibs[curSize-1] = curSize; 
     }else{ 
      flag = 0; 
     } 
    } 
    } 
} 

void printFibs(){ 
    int size = sizeof(fibs)/sizeof(int); 
    int i = 0; 
    for(i = 0;i<size;i++){ 
     printf("%d is: %d\n",i,fibs[i]); 
    } 
} 
+0

Вы выделили память для 'fibs', используя' malloc() 'или' calloc() 'перед' realloc() '? А какая именно ошибка? –

+0

Предназначен ли бесконечный цикл? – Xaqq

+0

нет этой функции, которая просто хочет генерировать массив fibs. –

ответ

5

Ну, ваш код печати неправильно. sizeof(fibs) всегда будет оцениваться как sizeof(int *), потому что его просто указатель.

Вы должны найти способ передать size вашей функции print. Это может быть, например, первое значение вашего массива. Но это детализация реализации, и это зависит от вас.

EDIT: Изменено sizeof(void *) до sizeof(int *), поскольку размер указателя может отличаться, как указано в pmg.

+0

Хорошо, я ушел с этого поста "http://stackoverflow.com/questions/37538/how-do-i-deetermine-the-size-of-my-array-in-c" В чем разница между этими двумя ??? мой массив технически одинаковый, не так ли? –

+0

А, я не вижу разницы –

+1

Просто FYI: 'void *' и 'int *' не обязательно имеют одинаковый размер (и требования к выравниванию, и дополнение и ...). – pmg

1

sizeof(fibs) является размер указателя fibs который является постоянным, поэтому ваша функция печати всегда будет печатать такое же количество элементов