Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
15 / 15 / 21
Регистрация: 24.09.2014
Сообщений: 76
1

Динамическое выделение памяти под многомерный массив

04.08.2015, 17:57. Показов 1968. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Проблема с выводом многомерного массива. Может память неправильно выделяю? Помогите чайнику.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#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();
}
Миниатюры
Динамическое выделение памяти под многомерный массив  
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.08.2015, 17:57
Ответы с готовыми решениями:

Динамическое выделение памяти под массив
Здравствуйте, помогите пожалуйста сделать в процедуре input динамическое выделение памяти под...

Динамическое выделение памяти под массив
Доброго времени! Требуется ввести размер массива с клав-ры, заполнить массив - изменить его размер...

Динамическое выделение памяти под массив строк
Программа выполняет конкатенацию произвольного количества строк. Но видимо я не правильно выделяю...

Динамическое выделение памяти под двумерный массив
Доброго времени суток, есть программа которая создаёт двумерный массив, вопрос такой как можно...

3
21 / 22 / 7
Регистрация: 04.08.2015
Сообщений: 131
04.08.2015, 18:11 2
в результате
C
1
 p=(int*)malloc(n*m*sizeof(int));
создается одномерный массив и в итоге адресация и обращение оказываются неверными

чтобы операция обращения по адресу
C
1
p[i,j]
была корректной нужно использовать запись
C
1
p[i*m +j]
0
Диссидент
Эксперт C
27709 / 17325 / 3811
Регистрация: 24.12.2010
Сообщений: 38,979
04.08.2015, 22:55 3
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Рыбоеж, уважаемый Andrew Sinjagin сказал все правильно. Но можно пойти и другим путем.
C
1
2
3
4
5
int **p;
p = (int **)malloc(n*sizeof(int *));
for(i=0; i<n; i++)
  *p = (int *)malloc(m*siseof(int));
p[i][j] = // теперь уже имеет смысл
Но и освободить память (free) тоже придется аккуратненько. В обратной последовательности. Сначала p[i], потом все p.
0
15 / 15 / 21
Регистрация: 24.09.2014
Сообщений: 76
05.08.2015, 01:42  [ТС] 4
Спасибо. Разобрался.
0
05.08.2015, 01:42
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.08.2015, 01:42
Помогаю со студенческими работами здесь

Динамическое выделение памяти под одномерный массив
В общем, вопрос такой. Пусть нам нужно задать массив, используя динамическое выделение памяти....

Динамическое выделение памяти под массив структур
Подскажите, пожалуйста, как верно выделить память под массив структур, размер которого вводится в...

Динамическое выделение памяти под строку
Требуется написать функцию, которая считывает строку, предварительно выдели под неё память и в...

Динамическое выделение памяти под структуры
Такая ситуация. Необходимо написать функцию ввода структуры c консоли void vvod(student &amp;man). Так...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru