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

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

28.08.2013, 11:28. Просмотров 1309. Ответов 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)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.08.2013, 11:28
Ответы с готовыми решениями:

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

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

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

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

3
Эксперт С++
4957 / 3063 / 456
Регистрация: 10.11.2010
Сообщений: 11,152
Записей в блоге: 10
28.08.2013, 14:39 2
Пример ввода и вывода покажи.
0
...
1793 / 1260 / 932
Регистрация: 12.02.2013
Сообщений: 2,058
28.08.2013, 14:40 3
Kolganov, 26 строка: ar = realloc(ar, siz * sizeof(int));
0
Эксперт С++
5036 / 3096 / 271
Регистрация: 11.11.2009
Сообщений: 7,047
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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.08.2013, 09:56

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

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

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

Динамическое выделение памяти под строку
Требуется написать функцию, которая считывает строку, предварительно выдели под неё память и в...

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


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

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

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