C++申请动态二维数组
#include<iostream>usingnamespacestd;intmain(){int**p;intm,n;cout<<"请输入行数和列数:"<<endl;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]? 展开
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]? 展开
4个回答
展开全部
你好!
首先你的代码有两个问题:
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、动态创建一维数组时,是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;
}
展开全部
#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。
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。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
使用vector生成二维数组方便些。也便于操作。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
奇怪,我这里运行代码没问题啊
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询