Динамическое распределение памяти - 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);
}

Объяснение кода листинга программы

  1. В функции dob происходит динамическое распределение памяти под массив arr трехмерного типа int.
  2. Первый аргумент функции dob - это указатель на массив указателей arr.
  3. Второй аргумент функции dob - это размерность массива по первому измерению nl.
  4. Третий аргумент функции dob - это размерность массива по второму измерению ml.
  5. Четвертый аргумент функции dob - это размерность массива по третьему измерению kl.
  6. В функции main происходит запрос на ввод количества строк, столбцов и строки, которую необходимо добавить.
  7. Затем в цикле происходит распределение памяти под двумерный массив a и заполнение его значениями.
  8. После этого происходит вызов функции dob для добавления новой строки в массив.
  9. В функции dob происходит перераспределение памяти под массив arr с добавлением нового элемента в массив указателей arr.
  10. Затем происходит копирование значения из массива arr в массив a.
  11. После этого происходит вывод полученного массива на экран.
  12. В функции main происходит освобождение памяти, выделенной под массив a.
  13. В функции main происходит вывод сообщения о завершении работы программы.
  14. В функции main происходит освобождение памяти, выделенной под массив a.
  15. В функции main происходит завершение работы программы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 3.833 из 5
Похожие ответы