Динамическое распределение памяти - C (СИ) (151633)
Формулировка задачи:
Надо добавить в двумерный массив строку с указанным номером , но не работает , как то неправильно добавляю память realloc-ом
#include <stdio.h> #include <malloc.h> #include <stdlib.h> int dob(char **arr[], int nl, int ml, int kl){ int i, j; j=0; arr=(int**)realloc(arr, (nl+1)*sizeof(int*)); arr[nl]=(int*) realloc(arr, ml*sizeof(int)); for(i=0; i<ml; i++){ arr[kl][i]=arr[nl][i]; } return(i); } void main (void) { int **a, n, m,k, l, i,j, f; printf("Vvedite kol-vo strok__"); scanf("%d", &n); printf("Vvedite kol-vo stolbcov__"); scanf("%d", &m); a=(int**) malloc(n*sizeof(int*)); for(i=0; i<n; i++){ a[i]=(int*) malloc(m*sizeof(int)); for(j=0; j<m; j++){ printf("a[%d][%d]", i, j); scanf("%d", &a[i][j]); } } printf("vvedite stroku kotoruyu nado dobavit_"); scanf("%d", &k); f=dob(a, n, m, k); printf("poluchenniy massiv__\n"); for(i=0; i<n+1; i++){ for(j=0; j<m; j++){ printf("%3d", a[i][j]); } printf("\n"); } for(i=0; i<n+1; i++){ free(a[i]); } free(a); }
Решение задачи: «Динамическое распределение памяти»
textual
Листинг программы
#include <stdio.h> #include <malloc.h> #include <stdlib.h> int dob(int **arr[], int nl, int ml, int kl){ int i, j; j=0; arr=(int**)realloc(arr, (nl+1)*sizeof(int*)); arr[nl]=(int*) realloc(arr, ml*sizeof(int)); for(i=0; i<ml; i++){ arr[kl][i]=arr[nl][i]; } return(i); } void main (void) { int **a, n, m,k, l, i,j, f; printf("Vvedite kol-vo strok__"); scanf("%d", &n); printf("Vvedite kol-vo stolbcov__"); scanf("%d", &m); a=(int**) malloc(n*sizeof(int*)); for(i=0; i<n; i++){ a[i]=(int*) malloc(m*sizeof(int)); for(j=0; j<m; j++){ printf("a[%d][%d]", i, j); scanf("%d", &a[i][j]); } } printf("vvedite stroku kotoruyu nado dobavit_"); scanf("%d", &k); f=dob(a, n, m, k); printf("poluchenniy massiv__\n"); for(i=0; i<n+1; i++){ for(j=0; j<m; j++){ printf("%3d", a[i][j]); } printf("\n"); } for(i=0; i<n+1; i++){ free(a[i]); } free(a); }
Объяснение кода листинга программы
- В функции
dob
происходит динамическое распределение памяти под массивarr
трехмерного типаint
. - Первый аргумент функции
dob
- это указатель на массив указателейarr
. - Второй аргумент функции
dob
- это размерность массива по первому измерениюnl
. - Третий аргумент функции
dob
- это размерность массива по второму измерениюml
. - Четвертый аргумент функции
dob
- это размерность массива по третьему измерениюkl
. - В функции
main
происходит запрос на ввод количества строк, столбцов и строки, которую необходимо добавить. - Затем в цикле происходит распределение памяти под двумерный массив
a
и заполнение его значениями. - После этого происходит вызов функции
dob
для добавления новой строки в массив. - В функции
dob
происходит перераспределение памяти под массивarr
с добавлением нового элемента в массив указателейarr
. - Затем происходит копирование значения из массива
arr
в массивa
. - После этого происходит вывод полученного массива на экран.
- В функции
main
происходит освобождение памяти, выделенной под массивa
. - В функции
main
происходит вывод сообщения о завершении работы программы. - В функции
main
происходит освобождение памяти, выделенной под массивa
. - В функции
main
происходит завершение работы программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д