2K_programuvanna / 2 mod / lab_10_malloc
.doc-
Лабораторная робота №10
-
Робота с данными в динамической памяти, использование функций динамического выделения памяти: malloc (), calloc(), realloc(), free ().
-
Цель: научится использовать операции динамического выделения памяти на примере работы с одномерными массивами.
-
Пример программы
#include <stdio.h>
#include <stdlib.h>
int main() {
int *a,n,i;
scanf("%d",&n); //Введення кількості елементів масиву
a=(int*)calloc(n, sizeof(int)); //Виділення динамічної пам'яті
if (!a) { //Перевірка на можливість виділення пам'яті
puts("ERROR");
return 1;
}
for (i=0; i<n; i++)
scanf("%d", a+i); //Введення даних масиву за допомогою вказівників
for (i=0; i<n; i++)
printf("%d",*(a+i)); //Виведення елементів масиву
free(a); //Звільнення динамічної пам'яті
return 0;
}
-
На что обратить внимание:
Некорректным использованием указателей является:
-
Попытка работы неинициализированым, с указателем.
-
Утеря ссылки на выделенную область памяти, при присвоении значения одного указателя другому.
-
Отсутствие освобождения памяти выделенной функцией malloc().
-
Попытка вернуть в качестве результата адрес локальной переменной класса auto.
-
Варианты заданий
Значения 2<N,M<20 определять случайным образом в начале программы или вводить с клавиатуры. Массивы память для массивов A,B выделять динамически.
-
Заданы два массива А(N) и В(M). Первым на печать вывести массив, сумма значений которого окажется наименьшей.
-
Заданы два массива А(N) и В(M). В каждом из массивов найти наименьшее значение и прибавить его ко всем элементам массива. На печать вывести исходные и преобразованные массивы.
-
Заданы два массива А(N) и В(M). В каждом из массивов найти среднее арифметическое всех элементов массивов. На печать вывести исходные массивы и найденные значения.
-
Заданы два массива А(N) и В(M). Напечатать наибольшее значение его порядковый номер для каждого из массивов.
-
Заданы два массива А(N) и В(M). Подсчитать в них количество отрицательных элементов и первым на печать вывести массив, имеющий наименьшее их количество.
-
Заданы два массива А(N) и В(M). Подсчитать в них количество элементов, больших значения T и первым на печать вывести массив, имеющий наименьшее их количество.
-
Заданы два массива А(N) и В(M). В каждом из массивов найти наименьшее значение и умножить на него все элементы массивов. На печать вывести исходные и преобразованные массивы.
-
Задан массив А(N). Сформировать масив В из индексов положительных еллеметов массива A.
-
Заданы два массива А(N) и В(M). В каждом из массивов найти наибольшее значение и разделить на него все элементы массивов. На печать вывести исходные и преобразованные массивы.
-
Заданы два массива А(N) и В(M). Подсчитать в них количество элементов, кратных двум и первым на печать вывести массив, имеющий наибольшее их количество.
-
Задан массив А(N). Получить из него массив В, состоящий из элементов массива А, которые больше 0.
-
Задан массив А(N). Получить из него массив В, состоящий из элементов массива А, которые кратны двум.
-
Задан массив А(N). Получить из него массив В, состоящий из элементов массива А, которые больше значения M.
-
Задан массив А(N). Заменить все его элементы с отрицательным значением на значение минимального положительного элемента.