Функция realloc - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Есть такой фрагмент кода:
 /* поиск отрицательных элементов и их размещение в конце массива*/
        int k = N - 1, iotr;
        float tmp;
        for( i = N - 1; i >= 0; i-- )
            if( array[i] < 0)
            {
            tmp = array[i];
            for( j = i; j < k ; j++)
                array[j]= array[j+1];
                array[k] = tmp;
                k--;
            }
        for( i = 0; array[i] > 0; i++ ) iotr = i;
        array = realloc( array, sizeof(float)*(iotr+1));
        printf("\n");
        for( i = 0; i <= iotr; i++ )
        printf( "A[%d] = %.2f\t", i, array[i] );
        free( array );
Была выделена динамическая память для массива array, после я решил перераспределить память с помощью функции realloc, отводя память только до последнего положительного элемента. Ну так вот, если я увеличиваю значение iotr, то в массиве пишется либо мусор, либо некоторые старые отрицательные элементы. Так и должно быть? Против мусора я ничего не имею, а вот почему старые пишутся, немножко недоумеваю. Есть подсознательные догадки, что « компилятор сам решает, что записать после выхода за динамический массив », но лучше объясните.

Решение задачи: «Функция realloc»

textual
Листинг программы
array[k] = tmp;
k--;

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4 из 5
Похожие ответы