На экран выводится "мусор" - 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;
}
Объяснение кода листинга программы
В данном коде:
- Объявлены переменные:
- n, m, i, j - целочисленные переменные для работы с массивом;
- arr - динамический массив (массив указателей на целочисленные значения), выделенный с помощью функции malloc.
- Запрошен размер массива с помощью функции scanf (вводятся два целых числа).
- Выделена память под каждый элемент массива arr с помощью функции malloc (для каждого элемента массива arr выделяется память под массив m целых чисел).
- Выведен шаблон для ввода чисел (строка
arr[%d][%d]=). - Введены числа для каждого элемента массива arr с помощью функции scanf.
- Выведено содержимое каждого элемента массива arr с помощью функции printf.
- Выведена строка, сообщающая об успешном вводе чисел для очередного элемента массива.
- После ввода всех чисел выводится общее количество введенных чисел (произведение количества строк и столбцов).
- Выводится размер массива arr с помощью функции printf.
- Бесплатно освобождается память, выделенная под каждый элемент массива arr, с помощью функции free.
- Выполняется функция _getch, предназначенная для приостановки работы программы до нажатия клавиши.
- Возвращается 0, что означает успешное завершение работы программы.