Это ваша проблема,
int row,column;
row=0;
column=0;
// ...
int my_array[row][column];
Вы создаете массив с нуля. Неважно, что вы позже назначите значения для row
и column
через scanf
, потому что к тому времени вы уже создали my_array
. Есть два решения:
1. Создайте массив с заданным размером.
Это само по себе исправляет ваш код, поскольку пользователь никогда не вводит значения, которые переполняют ваш буфер. (Если вы новичок в C и хотите понять, что я имею в виду, попробуйте поэкспериментировать с настройкой row
и column
для 25, чтобы начать с. Ваша программа будет работать. Но затем посмотрите, что произойдет, когда вы попытаетесь перейти более массив 25 на 25. О, нет, код снова ломается!).
2. Динамически распределять память, используя malloc
.
Объявите 2d массив следующим образом:
int **my_array;
Как только вы получите row
, вы malloc(sizeof(int *) * row);
, затем вы перебираете my_array
, выделяя столбцы. Если все это звучит совершенно чуждо вам, я рекомендую проверить Руководство Beej по программированию на C в разделе указателей. Удачи!