Организация динамического двухмерного массива. Порядок распределения памяти - C (СИ)
Формулировка задачи:
Итак, софорумцы, здравствуйте.
Как всегда, преподавателя ещё нет, а я не знаю прав я или нет.
Задача.
Требуется организовать двухмерный массив.
Мой порядок действий.
1. Вначале объявляется указатель на указатель
2. После мы резервируем память на указатель, в нашем случае массив указателей. В зависимости от количество выделенной памяти.
3. Каждым указателем массива указываем на необходимое кол-во памяти для столбцов массива
4. Заполняем массив.
Фрагмент кода:
Ещё один вопрос. Я как-то решил наглядно проверить распределение динамической памяти.
Решил указать на место меньшего размера, чем требуется.
Фрагмент кода:
В данном случае ошибка памяти вылетает только на 9-ом элемента. На 8 всё норм, хотя наглядно видно, что я выделяю всего 2 байта.
Такой вывод. Система резервирует сама какую-то часть памяти без ведома программиста?
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);
Решение задачи: «Организация динамического двухмерного массива. Порядок распределения памяти»
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; }
Объяснение кода листинга программы
В данном коде выполняется ряд действий, направленных на организацию и использование динамического двухмерного массива. Вот список этих действий:
- Инициализируются три переменные: sum1, k и s. Значение переменной sum1 установлено на 0, k - на 0, а s - на значение i.
- Запускается цикл for, который выполняется от i=1 до n-1.
- Внутри цикла, переменная s присваивается значение i.
- Запускается внутренний цикл while, который выполняется до тех пор, пока s не станет равным k-1.
- Внутри внутреннего цикла, к переменной sum1 прибавляется абсолютное значение элемента массива array[i][k].
- Значение переменной i уменьшается на 1.
- Значение переменной k увеличивается на 1.
- После выхода из внутреннего цикла, значение переменной k устанавливается на 0.
- Выводится значение переменной sum1 с помощью функции printf.
- Значение переменной sum1 устанавливается на 0.
- Цикл for повторяется для следующего значения i. Таким образом, в результате выполнения данного кода будет выведена сумма абсолютных значений элементов массива, расположенных вне заданной области.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д