Организация динамического двухмерного массива. Порядок распределения памяти - C (СИ)

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

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

Итак, софорумцы, здравствуйте. Как всегда, преподавателя ещё нет, а я не знаю прав я или нет. Задача. Требуется организовать двухмерный массив. Мой порядок действий. 1. Вначале объявляется указатель на указатель 2. После мы резервируем память на указатель, в нашем случае массив указателей. В зависимости от количество выделенной памяти. 3. Каждым указателем массива указываем на необходимое кол-во памяти для столбцов массива 4. Заполняем массив. Фрагмент кода:
int **array;// указатель на указатели
   int i, j, n;
   printf("Введите кол-во строк квадратной целочисленной матрицы A:");
   scanf("%d",&n);// кол-во элементов указателей в массиве
   array=(int**)malloc(n*sizeof(int));//выделяем место для массива указателей
   for(i=0;i<n;i++)
    {
    array[i]=(int*)malloc(n*sizeof(int));// выделяем место для столбцов при каждой итерации
    for(j=0;j<n;j++){
        printf("[%d][%d]=",i,j);
        scanf( "%d", &array[i][j]);
     }}
Ещё один вопрос. Я как-то решил наглядно проверить распределение динамической памяти. Решил указать на место меньшего размера, чем требуется. Фрагмент кода:
int *array;
    int i,n=9,k=1;
    array=(int*)malloc(k*sizeof(int));
    for(i=0;i<n;i++)
        {
    printf("[%d]=",i);
        scanf("%d",array+i);
В данном случае ошибка памяти вылетает только на 9-ом элемента. На 8 всё норм, хотя наглядно видно, что я выделяю всего 2 байта. Такой вывод. Система резервирует сама какую-то часть памяти без ведома программиста?

Решение задачи: «Организация динамического двухмерного массива. Порядок распределения памяти»

textual
Листинг программы
        int sum1=0, k=0, s;
 
        for(i=1;i<n-1;i++)
            {
            s=i;
          while(s!=(k-1))
            {
          sum1+=abs(array[i][k]);
         i-=1;
         k+=1;
          }
 
            k=0;
         printf("%d\n",sum1);
         sum1=0;
         }

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

В данном коде выполняется ряд действий, направленных на организацию и использование динамического двухмерного массива. Вот список этих действий:

  1. Инициализируются три переменные: sum1, k и s. Значение переменной sum1 установлено на 0, k - на 0, а s - на значение i.
  2. Запускается цикл for, который выполняется от i=1 до n-1.
  3. Внутри цикла, переменная s присваивается значение i.
  4. Запускается внутренний цикл while, который выполняется до тех пор, пока s не станет равным k-1.
  5. Внутри внутреннего цикла, к переменной sum1 прибавляется абсолютное значение элемента массива array[i][k].
  6. Значение переменной i уменьшается на 1.
  7. Значение переменной k увеличивается на 1.
  8. После выхода из внутреннего цикла, значение переменной k устанавливается на 0.
  9. Выводится значение переменной sum1 с помощью функции printf.
  10. Значение переменной sum1 устанавливается на 0.
  11. Цикл for повторяется для следующего значения i. Таким образом, в результате выполнения данного кода будет выведена сумма абсолютных значений элементов массива, расположенных вне заданной области.

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


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

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

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