Проверить корректность реализации динамического массива - C (СИ)
Формулировка задачи:
Проверьте пожалуйста или я правильно сделал динамический массив!!
И может кто нибудь может сделать этот же код через malloc ,а то я вообще не разобрался с malloc!!
Заранее Спасибо!!!
#include<iostream.h>
#include<math.h>
#include<stdio.h>
#include<iomanip.h>
int main()
{
int a[10][10],i,j,n,m,sum=0,*p;
cout<<"Vvedite razmer matrici NxM: "<<endl;
cin>>n>>m;
p=new int[n,m];
for(i=0;i<n;i++)
for(j=0;j<m;j++)
{
cout<<"Vvedite a["<<i<<"]["<<j<<"]: ";
cin>>a[i][j];
}
cout<<"Matrica :"<<endl;
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
cout<<setw(5)<<a[i][j]<<" ";
cout<<endl;
}
for(i=1;i<n;i+=2)
{
for(j=0;j<m;j++)
{
sum=sum+a[i][j];
}
}
cout<<"Summa nechetnih: "<<sum<<endl;
if(n<=1)
{
cout<<"V matrice otsutstvyut chetnie stroki"<<endl;
}
delete [] p;
return 0;
}Решение задачи: «Проверить корректность реализации динамического массива»
textual
Листинг программы
#include <stdlib.h>
/*...*/
int ** matrix, rows, columns, i, j;
/* где-то как-то получить количество строк (rows) и столбцов (columns) */
if ( ( matrix = malloc(sizeof(int*) * rows) ) == NULL ) {
/* сообщить об ошибке и выйти */
perror("malloc");
exit(1);
}
for ( i = 0; i < rows; ++i ) {
if ( ( matrix[i] = malloc(sizeof(int) * columns) ) == NULL ) {
perror("malloc");
exit(1);
}
}
for ( i = 0; i < rows; ++i ) {
for ( j = 0; j < columns; ++j ) {
/* matrix[i][j] - очередной элемент матрицы */
}
}
/*...*/
for ( i = 0; i < rows; ++i )
free(matrix[i]);
free(matrix);
/*...*/
Объяснение кода листинга программы
- Объявлены переменные:
matrix- указатель на массив указателей наint, инициализированный какNULL.rows- количество строк в матрице.columns- количество столбцов в матрице.i- индекс строки.j- индекс столбца.
- Проверяется корректность выделения памяти под массив указателей на
int. Если память не может быть выделена, программа выводит сообщение об ошибке и завершает свое выполнение. - В цикле выделяется память под каждую строку матрицы. Если память не может быть выделена, программа выводит сообщение об ошибке и завершает свое выполнение.
- В цикле заполняются элементы матрицы.
- В цикле освобождается память, выделенная под каждую строку матрицы.
- Освобождается память, выделенная под массив указателей на
int.