Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
Kolganov
0 / 0 / 0
Регистрация: 16.07.2013
Сообщений: 17
1

Динамическое выделение памяти под массив

28.08.2013, 11:28. Просмотров 1073. Ответов 3
Метки нет (Все метки)

Доброго времени! Требуется ввести размер массива с клав-ры, заполнить массив - изменить его размер (вдвое меньше - значит половина элементов должна сохранить прежнее значение).

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
void cal(int);
 
int main()
    {
        int siz;
        srand(time(NULL));
        printf("Enter array-size -> ");
        scanf("%d", &siz);
        cal(siz);
 
        return 0;
    }
 
void cal(int siz)
    {
        int *ar=calloc(siz, sizeof(int));
        int j;
        printf("\narray -> ");
        for(j=0; j<siz; j++)
            printf("%d ", ar[j]=rand()%50);
        siz/=2;
        ar=realloc(ar, siz);
        printf("\n1/2 array -> ");
        for(j=0; j<siz; j++)
            printf("%d ", ar[j]);
        putchar('\n');
        return;
    }
Проблема в том, что старое значение хранят в себе только первые 2-3 элемента, независимо от размера массива.
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.08.2013, 11:28
Ответы с готовыми решениями:

Динамическое выделение памяти под массив
Здравствуйте, помогите пожалуйста сделать в процедуре input динамическое выделение памяти под...

Динамическое выделение памяти под двумерный массив
Доброго времени суток, есть программа которая создаёт двумерный массив, вопрос такой как можно...

Динамическое выделение памяти под одномерный массив
В общем, вопрос такой. Пусть нам нужно задать массив, используя динамическое выделение памяти....

Динамическое выделение памяти под многомерный массив
Проблема с выводом многомерного массива. Может память неправильно выделяю? Помогите чайнику. ...

Динамическое выделение памяти под массив структур
Подскажите, пожалуйста, как верно выделить память под массив структур, размер которого вводится в...

3
castaway
Эксперт С++
4939 / 3044 / 455
Регистрация: 10.11.2010
Сообщений: 11,139
Записей в блоге: 10
Завершенные тесты: 1
28.08.2013, 14:39 2
Пример ввода и вывода покажи.
0
anmartex
...
1756 / 1233 / 923
Регистрация: 12.02.2013
Сообщений: 2,028
28.08.2013, 14:40 3
Kolganov, 26 строка: ar = realloc(ar, siz * sizeof(int));
0
silent_1991
Эксперт С++
5017 / 3077 / 271
Регистрация: 11.11.2009
Сообщений: 7,045
Завершенные тесты: 1
29.08.2013, 09:56 4
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

anmartex, не самое верное решение. realloc в случае неудачи возвращает NULL, при этом старая память не возвращается системе. Таким образом, неудача во время realloc'а может привести к утечке памяти. Правильнее было бы сохранять то, что вернул realloc, во временную переменную, и переписывать адрес в основную только в случае, если realloc вернул не NULL:
C
1
2
3
4
5
6
7
8
9
10
int size;
int arr = NULL, arr_tmp = NULL;
// получаем size
arr = malloc(size * sizeof(*arr));
// меняем size
arr_tmp = realloc(arr, size * sizeof(*arr));
if (NULL != arr_tmp) {
    arr = arr_tmp;
    arr_tmp = NULL;
}
Добавлено через 30 секунд
Ну да, это скорее к автору темы, anmartex всего лишь поправил его код.
0
29.08.2013, 09:56
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.08.2013, 09:56

Динамическое выделение памяти под массив строк
Программа выполняет конкатенацию произвольного количества строк. Но видимо я не правильно выделяю...

Динамическое выделение памяти под структуру
Задание, выделить динамически память под структуру и вывести список того что мы внесли туда....

Динамическое выделение памяти под структуры
Такая ситуация. Необходимо написать функцию ввода структуры c консоли void vvod(student &amp;man). Так...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru