На экран выводится "мусор" - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Вместо создаваемого массива выводит на экран "мусор" какой-то. Не пойму, что не так...
#include<stdio.h>
#include<conio.h>
#include<iostream>
 int main(void)
 {   int n, m, i, j;
     printf("Vvedite razmer massiva:");
     scanf("%d%d", &n, &m);
 
     int**arr = new int *[n];
     for( i=0; i<n; i++)
         arr[i] = new int [m];
     
     printf("Vvedite massiv\n\n");
 
     for(i=0; i<n; i++)
        { for(j=0; j<m; j++)
           {
            printf("arr[%d][%d]=", i, j);
            scanf("%d", (*(arr+i)+j));
            printf("\n%d\n", (*(arr+i)+j));}}
 
     printf("Vi vveli %d chisel(la)\n\n", i*j);
     for(i=0; i<n; i++)
        { for(j=0; j<m; j++)
           {
            printf("%9d", (*(arr+i)+j));}
            printf("\n");}
_getch();
 }

Решение задачи: «На экран выводится "мусор"»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
 
int main(void)
{  
    int n, m, i, j=0; 
    int **arr;
    
    printf("Vvedite razmer: ");
    scanf("%d%d", &n, &m);
    arr = malloc(n * sizeof(int*));     
 
    printf("Massiv\n\n"); 
    for(i=0; i < n; i++)
    {
        *(arr+i) = malloc(m * sizeof(int));
        for(j=0; j < m; j++)
        {
            printf("arr[%d][%d]=", i, j);
            scanf("%d", &arr[i][j]);
            printf("\n%d\n", arr[i][j]);
        }
        printf("stroka %d vvedena\n", i + 1);
    }
 
    printf("\n\nSpasibo!\n"); 
    printf("Vi vveli %d chisel(la)\n\n", i * j);
    for(i=0; i < n; i++)
    {
        for(j=0; j < m; j++)
            printf("%4d", arr[i][j]);
        printf("\n");
        free(arr[i]);
    }
    free(arr);
    
    _getch();
    return 0;
}

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

В данном коде:

  1. Объявлены переменные:
    • n, m, i, j - целочисленные переменные для работы с массивом;
    • arr - динамический массив (массив указателей на целочисленные значения), выделенный с помощью функции malloc.
  2. Запрошен размер массива с помощью функции scanf (вводятся два целых числа).
  3. Выделена память под каждый элемент массива arr с помощью функции malloc (для каждого элемента массива arr выделяется память под массив m целых чисел).
  4. Выведен шаблон для ввода чисел (строка arr[%d][%d]=).
  5. Введены числа для каждого элемента массива arr с помощью функции scanf.
  6. Выведено содержимое каждого элемента массива arr с помощью функции printf.
  7. Выведена строка, сообщающая об успешном вводе чисел для очередного элемента массива.
  8. После ввода всех чисел выводится общее количество введенных чисел (произведение количества строк и столбцов).
  9. Выводится размер массива arr с помощью функции printf.
  10. Бесплатно освобождается память, выделенная под каждый элемент массива arr, с помощью функции free.
  11. Выполняется функция _getch, предназначенная для приостановки работы программы до нажатия клавиши.
  12. Возвращается 0, что означает успешное завершение работы программы.

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


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

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

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