18.06.2014

Создание динамического массива на C

Создание динамического массива на C

Функция malloc() возвращает указатель на первый байт области памяти размером size, которая была выделена из динамически распределяемой области памяти. Если для удовлетворения запроса в динамически распределяемой области памяти нет достаточного объема памяти, возвращается нулевой указатель. Перед попыткой использовать выделенную память всегда проверяйте, что возвращаемое значение не является нулевым указателем. Попытка использовать нулевой указатель обычно приводит к полному отказу системы.

#include <stdlib.h>    // для функции malloc() и free()
#include <stdio.h>
#include <string.h>

int main()
{
const int STR_LEN_MAX = 100; // константа для максимальной длины строки
 
int n;
int i;
char** pp_str;
char str[STR_LEN_MAX];

scanf("%d", &n); // Вводится количество строк

pp_str = (char**) malloc(n * sizeof(char*)); // Создается массив указателей типа char* из динамической памяти

if(pp_str == NULL) // проверка наличия свободного места в динамической памяти, и выход если проверка провалилась
 {
    printf("Ошибка при распределении памяти\n");
    exit(1);
 }


for(i = 0; i < n; i++) // цикл для заполнения матрицы строками
 {
 scanf("%s", str); // читаем из стандартного входа текущую строку
 
 pp_str[i] = (char*) malloc((strlen(str) + 1) * sizeof(char)); // и выделяем под строку динамическую память для хранения
 
 if(pp_str[i] == NULL) // проверка наличия свободного места в динамической памяти, и выход если проверка провалилась
  {
  printf("Ошибка при распределении памяти\n");
  exit(1);
  }
 
 strcpy(pp_str[i], str);
 }

for(i = 0; i < n; i++) // цикл для вывода введенной матрицы строк в стандартный поток вывода
 {
 printf("%d. %s\n",i+1, pp_str[i]); 
 }

for(i = 0; i < n; i++) // освобождение каждой строки матрицы из динамической памяти
 {
 free(pp_str[i]); 
 }
free(pp_str); // удаление самой матрицы из динамической памяти


return 0;
}
#include <stdlib.h>    // для функции malloc() и free()
#include <stdio.h>

int main()
{ 
int n, m;
int i, j;
double** matrico;

printf("Введите количество строк в матрице:\n");
scanf("%d", &n); // Вводится количество строк в матрице

printf("Введите количество столбцов в матрице:\n");
scanf("%d", &m); // Вводится количество столбцов в матрице

matrico = (double**) malloc(n * sizeof(double*)); // Создается массив указателей типа double* из динамической памяти

if(matrico == NULL) // проверка наличия свободного места в динамической памяти, и выход если проверка провалилась
 {
    printf("Ошибка при распределении памяти\n");
    exit(1);
 }


for(i = 0; i < n; i++) // цикл для заполнения матрицы строками
 {
 matrico[i] = (double*) malloc(m * sizeof(double)); // Выделяем под каждую строку матрицы m ячеек типа double из динамической памяти
 
 if(matrico[i] == NULL) // проверка наличия свободного места в динамической памяти, и выход если проверка провалилась
  {
  printf("Ошибка при распределении памяти\n");
  exit(1);
  }
 
 for(j = 0; j < m; j++)
  {
  printf("Введите значение ячейки [%d,%d] [строка, столбец] в матрице:\n", i, j);
  scanf("%lf", &matrico[i][j]); // Вводится значение ячейки [i,j] в матрице
  }
 }

for(i = 0; i < n; i++) // цикл для вывода введенной матрицы строк в стандартный поток вывода
 {
 for(j = 0; j < m; j++)
  printf("%lf ", matrico[i][j]);
 printf("\n");
 }

for(i = 0; i < n; i++) // освобождение каждой строки матрицы из динамической памяти
 {
 free(matrico[i]); 
 }
free(matrico); // удаление самой матрицы из динамической памяти


return 0;
}

Тэги: <программирование, программа, C, динамическая память, массив, programado, programo, masivo, matrico>

Комментариев нет:

Отправить комментарий