Здравствуйте, S10, Вы писали:
S10>Пишу лабу по динамическим массивам, сделал библиотеку:
S10>
S10>/* Вставка последней строки после строки с индексом n. */
S10>void insert_last_after_n (int **mx, int &height, int width, int n)
S10>{
S10> int **tmp = new_matrix (height + 1, width);
.............................
S10> del_matrix (mx, height);
S10> mx = tmp;
S10> height ++;
S10>}
S10>
S10>А вот собственно сама программа с заданием:
S10>S10> int **matrix = new_matrix (m, n);
..............................
S10> insert_last_after_n (matrix, m, n, index);
S10> print_matrix (matrix, m, n);
S10> del_matrix (matrix, m);
S10>
Ошибка в том, что insert_last_after_n уничтожает исходную матрицу, не сообщая об этом наружу. Заодно у тебя получилась утечка, но ты её не успел заметить

Нужно поменять сигнатуру этой функции
S10>void insert_last_after_n (int ** /*inout*/ & mx, int /*inout*/ & height, int width, int n)
Кстати говоря. Поскольку размеры матрицы ходят парой вместе с ею самой, то было бы логично объединить их в одну структуру
struct matrix
{
int width, height;
int** data;
};
matrix new_matrix(int w, int h);
void delete_matrix(matrix m); // здесь спокойно можно по значению - копирование поверхностное
void insert_row(matrix& m, int jInsertTo, int jCopyFrom)
{
matrix mx = new_matrix(m.width, m.height+1);
for(int i=0; i!=mx.width; ++i)
{
for(int j=0; j!=mx.height; ++j)
{
int jSrc = (j<jInsertTo) ? j : (j==jInsertTo) ? jCopyFrom : (j+1);
mx[i][j] = m[i][jSrc];
}
}
}