C++申请动态二维数组

#include<iostream>
using namespace std;

int main()
{
int **p;
int m,n;

cout << "请输入行数和列数:" << endl;
cin >> m >> n;

*p = new int[m];
for(int i = 0;i <= m-1;i++)
{
p[i]=new int[n];
}

for(int row = 0;row <= m-1;row++)
{
for(int col = 0; col <= n-1;col++)
{
p[row][col] = 0;
}
}
for(int row = 0;row <= m-1;row++)
{
for(int col = 0; col <= n-1;col++)
{
cout << p[row][col] << "\t";
}
cout << "\n";
}

system("pause");
return 0;
}

差点忘了发代码
我用指向指针的指针定义了二维数组。
1,但是刚运行到第一个FOR循环的时候就出问题了.
2,我改成手动的逐一申请(比如p[0]=NEW int[5],p[1]=new int[5]...)
然后就没问题了,但运行到最后还是有问题
3,如果我要DELETE释放,是不是要先释放*p然后逐一释放p[0~5]?

你好!
首先你的代码有两个问题:
1、动态创建一维数组时,是p = new int[m];
因此动态创建二维数组时,应该是p = new int *[m]; 而不是*p = new int[m]; 你的程序运行到这一步出错。

2、多次定义row,导致编译出错。

另外,如果要释放指针,需要先把数组p中的指针依次delete,最后再释放p。

最终代码如下:
int main()
{
int **p;
int m,n;

cout << "请输入行数和列数:" << endl;
cin >> m >> n;

p = new int *[m];
for(int i = 0;i <= m-1;i++)
{
p[i]=new int[n];
}

for(int row = 0;row <= m-1;row++)
{
for(int col = 0; col <= n-1;col++)
{
p[row][col] = 0;
}
}

for(row = 0;row <= m-1;row++)
{
for(int col = 0; col <= n-1;col++)
{
cout << p[row][col] << "\t";
}
cout << "\n";
}

for(row = 0;row <= m-1;row++)
{
delete [] p[row];
}
delete p;

system("pause");
return 0;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-09-13
#include<iostream>
using namespace std;

int main()
{
int **p;
int m,n;

cout << "请输入行数和列数:" << endl;
cin >> m >> n;

p = new int*[m];
for(int i = 0;i <= m-1;i++)
{
p[i]=new int[n];
}

for(int row = 0;row <= m-1;row++)
{
for(int col = 0; col <= n-1;col++)
{
p[row][col] = 0;
}
}

for(int row = 0;row <= m-1;row++)
{
for(int col = 0; col <= n-1;col++)
{
cout << p[row][col] << "\t";
}
cout << "\n";
}

for(int row = 0;row <= m-1;row++)
{
delete [] p[row];
}

system("pause");
return 0;
}

//p是指向指针的指针,用它来开辟指针数组,然后指针数组中的每个指针一次开辟空间,释放空间帮你写出来了,要把指针数组中的指针依次delete。
第2个回答  2012-03-15
使用vector生成二维数组方便些。也便于操作。
第3个回答  2010-09-13
奇怪,我这里运行代码没问题啊
相似回答