Динамическое распределение памяти - 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происходит завершение работы программы.