下面这段程序为什么会运行出错?

如题
题目是要输出一个螺旋形的矩阵
比如输入4, 输出就是
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7

include

#include
using namespace std;
int main()
{
int **a, n, i, j, k = 1;

cin >> n;
if(n > 120) cin >> n;
a = new int *[n];
for (i = 0; i < n; ++i) a[i] = new int [n];

for(i = 0; i < n; ++i) for(j = 0; j < n; ++j) a[i][j] = 0;

i = j = 0;

while(k <= n * n){
    while(i < n && j >= 0) {
        if(a[j][i] != 0) break;
        a[j][i] = k;
        ++i;
        ++k;
    }
    i -= 1; j += 1;

    while(j < n && j >= 0){
        if(a[j][i] != 0) break;
        a[j][i] = k;
        ++j;
        ++k;
    }
    j -= 1; i -= 1;

    while(i < n && i >= 0){
        if(a[j][i] != 0) break;
        a[j][i] = k;
        --i;
        ++k;
    }
    i += 1; j -= 1;

    while(i < n && i >= 0){
        if(a[j][i] != 0) break;
        a[j][i] = k;
        --j;
        ++k;
    }
    j += 1; i += 1;
}
cout << endl;

for(i = 0; i < n; ++i) {
    for(j = 0; j < n; ++j) cout << setw(6) << a[i][j];
    cout << endl;
}


for(i = 0; i < n; ++i) delete [] a[i];
delete [] a;

return 0;

}

你这没有出错,是不是你的头文件没导入
#include
#include "iostream"
最开始加上这两行

自己写了一个,可以参考

#include <iostream>
#include <stdio.h>

using namespace std;

int matrix_init(int ***p)
{
    int res = 1;
    int size = 0;
    printf("输入矩阵大小(大于1):");
    cin >> size;

    do
    {
        if ((*p = new int *[size]) == NULL)
        {
            res = 0;
            break;
        }

        for (int i = 0; i < size; i++)
        {
            if (((*p)[i] = new int[size]) == NULL)
            {
                res = 0;
                break;
            }

        }

    } while (0);

    if (res == 1)
    {
        res = size;
        cout << "矩阵初始化完成";
    }
    else
    {
        cout << "矩阵构建失败";
    }

    return res;
}

void matrix_deint(int **p,int size)
{
    for (int i = 0; i < size; i++)
    {
        delete []p[i];
    }
    delete []p;
}

void matrix_create(int **matrix, int n)
{
    int k = 0; //标记第几圈
    int sum = 1;
    int i, j;
    int threshold = 0;

    threshold = n * n;

    while (1)
    {
        //顶行
        for (i = k; i < n - k && threshold >= sum; i++, sum++)
        {
            matrix[k][i] = sum;
        }

        //尾列
        for (i = k + 1; i < n - k && threshold >= sum; i++, sum++)
        {
            matrix[i][n - k - 1] = sum;
        }

        //底行
        for (i = n - k - 1 - 1; i >= k && threshold >= sum; i--, sum++)
        {
            matrix[n - k - 1][i] = sum;
        }

        //首列
        for (i = n - k - 1 - 1; i > k && threshold >= sum; i--, sum++)
        {
            matrix[i][k] = sum;
        }

        k++;

        if (threshold < sum)
        {
            printf("\n旋转矩阵构建完成\n");

            for (i = 0; i < n; i++)
            {
                for (j = 0; j < n; j++)
                {
                    printf("%3d", matrix[i][j]);
                }

                printf("\n");
            }

            break;
        }
    }
}

int main()
{
    int n = 0;
    int **matrix = NULL;

    if (!(n = matrix_init(&matrix)))
    {
        return 0;
    }

    matrix_create(matrix, n);

    matrix_deint(matrix,n);

    return 0;
}

运行结果:图片说明