随笔 - 16, 文章 - 1, 评论 - 4, 引用 - 0
数据加载中……

C++中如何动态分配二维数组

一、问题的提出

//////////////////////////////////////////////////////

#include <iostream.h>

const int M=200;

void main()
{
double a[M][M], b[M][M];
double aa=0, bb=0;

for(int i=0; i<M; i++)
for(int j=0; j<M; j++)
{
a[i][j]=1.0;
b[i][j]=1.0;

aa+=a[i][j];
bb+=b[i][j];
}

cout<<"aa="<<aa<<",  bb="<<bb<<endl;
}

////////////////////////////////////////////////////////

M=200,运行很正常,可以输出结果。当M=300时就会出现运行错误。

是不是C++中对数组大小有限制,怎么申请大数组呢?

高人指点:
你这种方法建的数组好象是存在STACK里, 大小有限制.
2维数组在C/C++里不是很好用.建议用一维数组代替, 可以用 NEW 建指针数组, 这样可以用大数组.
其实最好用VECTOR, 做动态时很方便, 而且从2维到3维也更自然一些

 

二、问题的解决

A.用一维数组代替,应用new、delete命令。

//////////////////////////////////////////////////////

#include <iostream.h>

const int M=500;

void main()
{
double *a, *b;
double aa=0, bb=0;

a=new double[M*M];
b=new double[M*M];

for(int i=0; i<M; i++)
for(int j=0; j<M; j++)
{
a[i+j*M]=1.0;
b[i+j*M]=1.0;

aa+=a[i+j*M];
bb+=b[i+j*M];
}

cout<<"aa="<<aa<<",  bb="<<bb<<endl;

delete []a;
delete []b;
}

///////////////////////////////////////////////////////

OK,用NEW建指针数组,运行通过,M=1000都没问题, :)

B.用vector命令。

////////////////////////////////////////////////////////

#include <iostream.h>
#include <vector>

using std::vector;

const int M=1000;

void main()
{
vector <double> a(M*M);
vector <double> b(M*M);

double aa=0, bb=0;

for(int i=0; i<M; i++)
for(int j=0; j<M; j++)
{
a[i+j*M]=1.0;
b[i+j*M]=1.0;

aa+=a[i+j*M];
bb+=b[i+j*M];
}

cout<<"aa="<<aa<<",  bb="<<bb<<endl;
}

////////////////////////////////////////////////////////////////

OK,好像也可以,不错不错。

C.网上找到个比较好的。


http://nothingnowhere.blogchina.com/4539351.html

c++中如何动态分配二维数组
关键词: 二维数组                                          

#include<iostream.h>

void main()
{
int **p;
int N,M,s=0;
cin>>N>>M;

p = new int*[N];
for(int i=0;i<N;i++) { p[i] = new int[M];  }

for(int j=0;j<M;j++)
 for(int k=0;k<N;k++)
 {p[k][j]=s++; cout<<p[k][j]<<endl;}
}
/////////////////////////////////////////////////

这个方法确实不错,用起来更方便。

posted on 2007-07-17 13:24 东东会会 阅读(4285) 评论(2)  编辑 收藏 引用 所属分类: C++ 基础

评论

# re: C++中如何动态分配二维数组  回复  更多评论   

最后一个怎么没有释放内存?
2008-06-18 22:03 | lm

# re: C++中如何动态分配二维数组  回复  更多评论   

@lm

嗯 会造成内存泄漏~~
2008-10-19 21:06 | shan

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理