Перестановка указателей в двумерном динамическом массиве
Есть динамический массив
int **create_array(size_t m, size_t n) {
int **arr = new int *[m];
arr[0] = new int[m * n];
for (size_t i = 1; i != m; ++i)
arr[i] = arr[i - 1] + n;
return arr;
}
Необходимо поменять местами с нулевой строку,содержащую минимальный элемент, т.е. поменять указатели
В функции обмена происходит выход за границы массива. Не могу понять почему.
void swap_min(int **mt, int m, int n) {
int number_row = 0;
int min = *(*mt);
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
if (*(*mt + i * n + j) < min) {
min = *(*mt + i * n + j);
number_row = i;
}
}
}
if (number_row == 0)
return;
else {
int *tmp = mt[number_row];
mt[number_row] = mt[0]; // после этой строчки не происходит ничего
mt[0] = tmp; // вот после этой строчки ошибка
}
}
Что я делаю неправильно?