2016-10-20 2 views
0

Здесь я работаю с кодом, который будет подсчитывать количество «1», присутствующего в массиве на time.say, мой массивКак увеличить размер массива во время выполнения, чтобы избежать стоимости мусора в конце

int arr[12] = {0,1,1,0,0,1,1,1,1,0,0,1}; 

Number of "1" present at a time are (2,4,1) 

Я хочу сохранить результат в массиве calle магазине. Поскольку последовательность может меняться, в самом начале я не знаю, какой размер массива я должен объявить, чтобы хранить их. Самый вероятный случай будет там быть массивом следующим образом:

int arr[12]={0,1,0,1,0,1,0,1,0,1,0,1}; 

поэтому я динами cally выделил массив, равный половине фактического массива для хранения наихудшего случая. Но если не самый худший случай, я получаю значение мусора в конце массива store.I хотел бы знать, как я могу динамически увеличить размер массива во время выполнения, чтобы i не нужно иметь дело с любым значением мусора

#include<stdio.h> 
#include<stdlib.h> 

int main(){ 

    int arr[12] = {0,1,1,0,0,1,1,1,1,0,0,1}; 
    int size = sizeof(arr)/sizeof(arr[0]); 

    int *store =(int *)malloc((size/2)*sizeof(int)); 

    int i=0,j=0,count=0; 
    while(arr[i]<size){ 
     while(arr[i]==0 && arr[i]<size){ 
      i++; 
     } 
     if(i==size){ 
      break; 
     } 
     while(arr[i]==1){ 
      i++; 
      count++; 
     } 
     store[j]=count; 
     j++; 
     count=0; 
    } 
    for(i=0;i<size/2;i++){ 

     printf("%d ",store[i]); 
    } 

} 
+0

Даже если вы измените размер массива, вам нужно отслеживать, сколько записей допустимо (или размер массива, если он содержит только допустимые записи). Таким образом, вам никогда не нужно смотреть на мусор, потому что вы всегда знаете, насколько массив не мусор. Обратите внимание, что вы не можете начать с пустого массива - они не разрешены в стандартном C. Таким образом, вы должны быть осторожны с массивами в любое время. –

ответ

1

используйте realloc

//size2 has the size of the new array to be stored 
store = realloc(store, size2 * sizeof int); 

if (store == NULL) 
{ 
    // Reallocation failed -- Take appropriate action 
    printf ("Reallocation failed"); 
    exit(1); 
} 
+0

Мне пока не ясно. Не могли бы вы рассказать? –

0

Вы можете использовать calloc

store = calloc(store,sizeof(int));