Что я делаю не так в понимании malloc и realloc? - PullRequest
0 голосов
/ 06 июня 2019

Я пытался создать массив, размер которого будет изменяться во время работы программы.Я узнал о функциях malloc и realloc, но, похоже, я что-то неправильно понимаю.Вот функция, которую я написал, которая создает массив, основанный на том, сколько циклов выполняет цикл.

int* flexibleArray() {
    int *arrayFlex = NULL;
    int number=0, cnt=0;
    while (number!=-1) {
        printf("\nInsert the variable: ");
        scanf("%d", &number);
        if (number==-1){
            break;
        }
        cnt+=1;
        arrayFlex = realloc(arrayFlex, cnt * sizeof(int));
        arrayFlex[cnt-1] = number;
    }
    return arrayFlex;
}

Я попытался прочитать документацию по этому поводу, которую нашел в Интернете, но потом не могу получитьновый массив после перераспределения.

int *array;
    array = flexibleArray();
    int arraySize = (sizeof(array))/(sizeof(int));
    for(int i=0; i<arraySize; i++) {
        printf("%d ", array[i]);
    }

В основном это то место, где я тестирую функцию, чтобы увидеть, выполняет ли она то, что должна.

Я новичок в C, извините, ребята.Спасибо

1 Ответ

2 голосов
/ 06 июня 2019

Что-то вроде этого должно сделать это.

int* flexibleArray() {                                                          
    int *arrayFlex = NULL;                 // needs to be a pointer             
    int number=0, cnt=0;                                                        
    while (number!=-1) {                                                        
        printf("\nInsert the variable: ");                                      
        scanf("%d", &number);                                                   
        if (number==-1){                                                        
            break;                                                              
        }                                                                       
        cnt+=1;                                                                 
        arrayFlex = realloc(arrayFlex, cnt * sizeof(int));                      
        arrayFlex[cnt-1] = number;                                              
    }                                                                           
    return arrayFlex;                                                           
}     

РЕДАКТИРОВАТЬ: исправлены опечатки.

...