Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.02.2022, 18:20   #1
Ынтар
Новичок
Джуниор
 
Регистрация: 05.02.2022
Сообщений: 1
По умолчанию Как корректно передать матрицу в функцию через указатель?

Здравствуйте. Мне нужно написать программу на языке си, которая получает с клавиатуры от пользователя двумерный массив. Пользователь задаёт размеры и заполняет элементы. Затем некая функция производит с ним какие-то действия и результат выводится на экран. При этом всём требуются отдельные функции для ввода, вычисления и вывода. Программа работает в консоли. Ввод и вывод, если больше не писать функций, произвести получается, но после появляется ошибка ./bus error, обращение к несуществующей памяти, как я понимаю. Пытаюсь сделать функцию с циклом по подобию вывода, она делает чёрти что. Мне кажется, я путаюсь в указателях. Вот мой код:
Код:
 
#include <stdio.h>
#include <stdlib.h>
void input(int ***matrix, int *n, int *m);
void output(int ***matrix, int n, int m);
 
 
void main() {
    int **matrix, **result;
    int n, m;
 
    input(&matrix, &n, &m);
    output(&matrix, n, m);
}
 
void input(int ***matrix, int *n, int *m) {
    int i, j;
    scanf("%d", n);
     scanf("%d", n);
    *matrix = (int**)malloc((*n)*sizeof(int*));
    for (i = 0; i < *m; i++)
    matrix[i] = (int**)malloc((*m) * sizeof(int));
    for ( i = 0; i < *n; ++i )
        for ( j = 0; j < *m; ++j )
            scanf("%d", &matrix[ i ][ j ]);
}
void output(int ***matrix, int n, int m) {
    int i, j;
    for (i = 0; i < n; i++) {
    for (j = 0; j < m; j++)
    printf("%d ", matrix[i][j]);
    printf("\n");
    }
}
Пожалуйста, помогите разобраться что не так и разъясните про двойные и тройные указатели.
Ынтар вне форума Ответить с цитированием
Старый 06.02.2022, 03:39   #2
Desc
Участник клуба
 
Аватар для Desc
 
Регистрация: 21.11.2007
Сообщений: 1,063
По умолчанию

Вот здесь:
Код:
void input(int ***matrix, int *n, int *m);
void output(int ***matrix, int n, int m);
происходит перезапись введенных данных еще не существующими выходными.

Link: Указатели на указатели - многочисленное перенаправление

P. S.
Если есть необходимость использовать имена matrix, n m в обоих функциях, тогда наверное конструировать интерфейс в закрытых классах...
Или структурах, если это чистый Си...
I am not a wizard, I am just learning.

Последний раз редактировалось Desc; 06.02.2022 в 04:06. Причина: Добавил P. S.
Desc вне форума Ответить с цитированием
Старый 06.02.2022, 04:48   #3
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Пара опечаток (лишние *, нехватка *, иногда не те переменные):
Код:
#include <stdio.h>
#include <stdlib.h>

void input(int ***matrix, int *n, int *m);
void output(int **matrix, int n, int m);

void main() {
    int **matrix;
    int n, m;

    input(&matrix, &n, &m);
    output(matrix, n, m);
}

void input(int ***matrix, int *n, int *m) {
    scanf("%d%d", n, m);
    *matrix = (int**) malloc((*n) * sizeof(int*));
    for (int i = 0; i < *n; i++)
        (*matrix)[i] = (int*) malloc((*m) * sizeof(int));
    for (int i = 0; i < *n; i++)
        for (int j = 0; j < *m; j++)
            scanf("%d", &(*matrix)[i][j]);
}

void output(int **matrix, int n, int m) {
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++)
            printf("%d ", matrix[i][j]);
        printf("\n");
    }
}
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Передать указатель на функцию в параметр другой функции. Мaкс Общие вопросы C/C++ 5 30.01.2020 12:01
Помогите передать указатель на функцию класса bakanaev Общие вопросы Delphi 7 21.09.2014 18:33
Передать указатель на указатель в функцию erro Общие вопросы C/C++ 3 29.10.2012 17:59
Как передать указатель на функцию в функцию WIN32APIist Общие вопросы C/C++ 1 27.01.2011 10:35
Как передать в функцию указатель на String avd Общие вопросы C/C++ 6 06.06.2010 17:52