Динамическое выделение памяти под многомерный массив - C (СИ)
Формулировка задачи:
Проблема с выводом многомерного массива. Может память неправильно выделяю? Помогите чайнику.
#include <iostream>
#include <stdio.h>
#include <conio.h>
#include <clocale>
int main()
{
setlocale(LC_ALL, "Rus");
int n;
int m;
int i, j;
int *p;
printf("Введите N строк: ");
scanf("%d",&n);
printf("Введите M столбцов: ");
scanf("%d",&m);
p=(int*)malloc(n*m*sizeof(int));
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
printf("Введите a[ %d ][ %d ]: ",i+1,j+1);
scanf("%d",&p[i,j]);
}
}
printf("Полученная матрица:\n\n");
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
printf("a[ %d ][ %d ]: \n",p[i,j]); // доделать!
}
}
free(p);
getch();
}Решение задачи: «Динамическое выделение памяти под многомерный массив»
textual
Листинг программы
int **p; p = (int **)malloc(n*sizeof(int *)); for(i=0; i<n; i++) *p = (int *)malloc(m*siseof(int)); p[i][j] = // теперь уже имеет смысл
Объяснение кода листинга программы
- Объявляется двумерный массив типа int **p;
- С помощью функции malloc() динамически выделяется память под n строк (размер каждой строки - m элементов);
- Для каждой строки массива p[i] выделяется память под m элементов с помощью функции malloc();
- Теперь p[i][j] - это элемент массива, который может быть использован в коде.