/* **DUG 当输入行数小于列数时 程序BUG 问题所在: 动态分配的内存不足 那么应该分配多少的内存才合适? */ #include <iostream> using namespace std; int TestArry(int , int ); //螺旋数组函数 int main(void) { int m, n; while (1) { cout << "请输入要构造螺旋数组的行列: \n"; cin >> m; cin >> n; TestArry(m, n); } return 0; } int TestArry(int M, int N) { int i, j; int n, m = 1; printf("构造的螺旋数组 p[%d][%d] 如下\n", M, N); //开辟一个动态二维数组 int **p; p = new int *[M+N]; for (i = 0; i < M+N; i++) { p[i] = new int[N]; } //螺旋数组的实现 for (n = 0; n < M / 2 + 1; n++)//此循环是螺旋循环的次数 { for (j = n; j < N - n; j++)//第一次循环时第一行的循环 { p[n][j] = m++; } for (i = n + 1; i < N - n; i++)//第一次循环的最后一列 { p[i][N - n - 1] = m++; } for (j = M - n - 2; j>n; j--)//第一次循环最后一行 { p[M - n - 1][j] = m++; } for (i = M - n - 1; i > n; i--)//第一次循环的第一行 { p[i][n] = m++; } } //输出螺旋数组 for (i = 0; i < M; i++) { for (j = 0; j < N; j++) printf("%d\t", p[i][j]); printf("\n"); } delete[]p; p = NULL; return 0; } </iostream>