Задать вопрос
DredWulf
@DredWulf

Как решить проблему с вводом двумерного массива?

Необходимо получить от пользователя размерность массива и его элементы.
При вводе его элементов возникает следующая ошибка:
5f99344311fd6862007214.png
Как решить проблему? Необходимо получить от пользователя матрицу, а после вывести её в консоль (для дальнейших вычислений).

CODE:
#include <stdio.h>
#include <locale.h>
#include <math.h>

int main()
{
    setlocale(LC_ALL, "Rus");
//row - строки, col - столбцы
    int row, col;

//Visual Studio не позволяет создать массив a[row][col], создаю a[1][1], чтобы потом переопределить
    int a[1][1];
    int i, j;

    printf("Число строк: ");
    scanf_s("%d", &row);

    printf("Число столбцов: ");
    scanf_s("%d", &col);

//переопределяю массив новыми размерами
    a[row][col];

    printf("Ввод матрицы \n");
    for (i = 0; i < row; ++i) {
        for (j = 0; j < col; ++j)
        {
            scanf_s("%d", &a[i][j]);
        }
    }

    return 0;
}
  • Вопрос задан
  • 180 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 3
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
//переопределяю массив новыми размерами
a[row][col];
С чего вы сделали такой вывод? Это просто получение значения из массива a по индексам row и col.
Соответственно, массив у вас остаётся размером 1x1 и при записи в несуществующие адреса повреждается стек.
Как решить проблему?
Изучить, как создавать массив динамически.
Ответ написан
Комментировать
a[row][col]; Это не переопределение массива, а доступ к элементу с индексами row и col.
Для создания динамичесго массива используйте указатели или std::vector.
Ответ написан
Комментировать
wataru
@wataru
Разработчик на С++, экс-олимпиадник.
Как вам уже сказали, вы не выделяете массив нужного размера. Можно вместо int a[1][1] делать int a[100][100], например, если вам известно, что массив не будет больше 100 строк и столбцов. Но, по хорошему, это надо обработать и, если пользователь ввел row == 101, то надо завершиться, сообщив пользователю о слишком большой размерности.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы