Пишу лабу по динамическим массивам, сделал библиотеку:
using namespace std;
/* Создание матрицы. */
int **new_matrix (int height, int width)
{
int **mx = new int *[height];
for (int i = 0; i < height; i ++)
mx[i] = new int[width];
return mx;
}
/* Тотальный дестрой матрицы ^_^ */
void del_matrix (int **mx, int height)
{
for (int i = 0; i < height; i++)
delete mx[i];
delete[] mx;
}
/* Заполнение матрицы случайным образом. */
void fill_matrix (int **mx, int height, int width)
{
for (int i = 0; i < height; i ++)
for (int j = 0; j < width; j ++)
mx[i][j] = rand () % 151 - 50;
}
/* Заполнение матрицы нулями. */
void null_matrix (int **mx, int height, int width)
{
for (int i = 0; i < height; i ++)
for (int j = 0; j < width; j ++)
mx[i][j] = 0;
}
/* Распечатка матрицы. */
void print_matrix (int **mx, int height, int width)
{
cout << endl;
cout << "Матрица:" << endl;
for (int i = 0; i < height; i ++)
{
for (int j = 0; j < width; j ++)
cout << mx[i][j] << "\t";
cout << endl;
}
cout << endl;
}
/* Поиск числа а в матрице*/
int find_in_matrix (int **mx, int height, int width, int a)
{
for (int i = 0; i < height; i ++)
for (int j = 0; j < width; j ++)
if (mx[i][j] == a)
return i;
return -1;
}
/* Вставка последней строки после строки с индексом n. */
void insert_last_after_n (int **mx, int &height, int width, int n)
{
int **tmp = new_matrix (height + 1, width);
/*null_matrix (tmp, height + 1, width);*/
for (int i = 0; i <= n; i ++)
for (int j = 0; j < width; j ++)
tmp[i][j] = mx[i][j];
n ++;
int last = height - 1;
for (int j = 0; j < width; j ++)
tmp[n][j] = mx[last][j];
if (n == height)
{
height ++;
return;
}
for (int i = n + 1; i <= height; i ++)
for (int j = 0; j < width; j ++)
tmp[i][j] = mx[i - 1][j];
del_matrix (mx, height);
mx = tmp;
height ++;
}
А вот собственно сама программа с заданием:
/* Вставить после строки, в которой есть заданное число А,
последнюю строку. */
#include "stdafx.h"
#include <iostream>
#include <ctime>
#include "..\matrix.h"
using namespace std;
int main ()
{
setlocale (LC_ALL, "russian");
srand ((unsigned) time (0));
int a, m, n, index;
do
{
cout << "Введите размерность матрицы (высота, ширина): ";
cin >> m >> n;
}
while ((m <= 0) || (n <= 0));
int **matrix = new_matrix (m, n);
fill_matrix (matrix, m, n);
print_matrix (matrix, m, n);
cout << "Введите число для поиска: ";
cin >> a;
index = find_in_matrix (matrix, m, n, a);
if (index < 0)
{
cout << "Число не было найдено в матрице" << endl;
system ("pause");
exit (1);
}
insert_last_after_n (matrix, m, n, index);
print_matrix (matrix, m, n);
del_matrix (matrix, m);
system ("pause");
return 0;
}
Проблема: комплится, вставка последней строки после строки с индексом n вроде работает под отладчиком, но при распечатке результирующей матрицы всё валится

В чём мои ошибки?