Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.07.2021, 18:58   #1
Roberttt
Пользователь
 
Регистрация: 30.05.2018
Сообщений: 56
По умолчанию Динамическое выделение памяти в СИ

Здравствуйте! Можете сказать, что я делаю неправильно. Задача состоит в том, чтобы считать массив.
1) Первое число на входе - длина массива, затем идут элементы.
2) Если пользователь вводит числа 3 4 0 5. Это значит, что мы выделим массив на 3 элемента, в который запишем 4 0 5.

Код:
// заполнить уже выделенный массив array размера size числами
void array_int_fill( int64_t* array, size_t size ) {
    for (size_t i = 0; i < size; i++) {
        scanf("%" SCNd64, &array[i]);
    } 
}

// Считать размер массива в *size, выделить память под массив и заполнить его числами.
int64_t* array_int_read( size_t* size ) {
    scanf("%zu", size);
    int64_t* array = malloc(*size);
    return array;
}
Roberttt вне форума Ответить с цитированием
Старый 13.07.2021, 18:59   #2
Roberttt
Пользователь
 
Регистрация: 30.05.2018
Сообщений: 56
По умолчанию

Один тест проходит, а второй заваливается
Roberttt вне форума Ответить с цитированием
Старый 13.07.2021, 19:08   #3
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Код:
malloc(*size * sizeof(int64_t));
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 14.07.2021, 00:26   #4
Roberttt
Пользователь
 
Регистрация: 30.05.2018
Сообщений: 56
По умолчанию

А почему число элементов умножается на количество байтов в int64_t? Это связано с тем, что сам массив имеет тип int64_t, а поэтому для каждого элемента нужно выделить по 8 байт? (в задании числа находятся в диапазоне [-2^63 ; 2^63 - 1])

Последний раз редактировалось Roberttt; 14.07.2021 в 00:34.
Roberttt вне форума Ответить с цитированием
Старый 14.07.2021, 00:48   #5
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Да, потому что malloc выделяет запрошенное количество байтов, а каждый элемент массива требует больше одного байта.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 14.07.2021, 11:10   #6
Roberttt
Пользователь
 
Регистрация: 30.05.2018
Сообщений: 56
По умолчанию

Спасибо за разъяснения
Roberttt вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Динамическое выделение памяти! Bantom Помощь студентам 1 07.04.2014 12:48
Динамическое выделение памяти Bantom Помощь студентам 0 02.04.2014 22:35
Динамическое выделение памяти Devdev12 Общие вопросы C/C++ 13 02.08.2013 10:25
Распределение памяти. Динамическое выделение памяти с++ Tolian92 Помощь студентам 8 14.05.2012 21:44
Динамическое выделение памяти FW-TOT Общие вопросы C/C++ 2 19.12.2008 00:42