В чем ошибка при анализе диагоналей матрицы

Вот код, он обходит все диагонали матрицы начиная с крайнего левого элемента. Написал код, но он почему то работает только для матриц не более чем 3х3, в чем ошибка?

#include <iostream>
#include <ctime>
#include <cstddef>
using namespace std;

int* second(int** matrix, int size) {
    int* new_matrix = new int[size * size];
    int count = 0;
    int sup_var_1 = 0;
    int sup_var_2 = 0;

    for (int i = 0; i <= size - 1; i++) {
        sup_var_1 = 0;
        new_matrix[count] = matrix[sup_var_1][i];
        count++;
        for (int j = size - i; j < size; j++) {
            sup_var_1++;
            new_matrix[count] = matrix[sup_var_1][size - j - 1];
            count++;
        }
    }
    for (int i = 1; i <= size - 1; i++) {
        sup_var_2 = size - 1;
        new_matrix[count] = matrix[i][sup_var_2];
        count++;
        for (int j = 1; j < size - 1; j++) {
            sup_var_2++;
            new_matrix[count] = matrix[sup_var_2 - 1][j];
            count++;
        }
    }
    return new_matrix;
}

int main() {
    //srand ( time(NULL) );
    int** arr;
    int col = 4;
    int row = 4;
    arr = new int* [col];

    for (int i = 0; i < row; i++) {
        arr[i] = new int[col];
    }
    for (int i = 0; i < row; i++) {
        for (int j = 0; j < col; j++) {
            arr[i][j] = ((rand() % 9));
        }
    }
    for (int i = 0; i < row; i++) {
        for (int j = 0; j < col; j++) {
            cout << " " << arr[i][j];
        }
        cout << endl;
    }
    /*for (int i = 0; i < col; i ++) {
      delete [] arr[i];
    }
    delete [] arr;*/

    int* new_arr = new int[row];

    new_arr = second(arr, col);
    cout << endl;
    /*cout << "Правые диагонали матрицы: " << endl;
    for (int i=0; i < col * row; i++) {
      cout << " " << new_arr[i];
    }*/

    cout << "Левые диагонали матрицы: " << endl;
    for (int i = 0; i < col * row; i++) {
        cout << " " << new_arr[i];
    }
}

Ответы (0 шт):