+ -
当前位置:首页 → 问答吧 → 高手们,请帮忙解答动态数组的问题

高手们,请帮忙解答动态数组的问题

时间:2011-12-21

来源:互联网

M,N的值比较大,要用全局变量才行。
但是M,N的值(M=3000,N=3000)是程序运行的时候才获得的
unsigned short pixelData1[M][N] = {0};
动态数组要如何搞定?

作者: fyz2841585   发布时间: 2011-12-21

unsigned short **pixData1 = NULL;
pixData1 = (unsigned short**)malloc(sizeof(unsigned short*)*M);

for(int i=0; i<M; i++)
{
  pixData1[i] = malloc(sizeof(unsigned short)*N);
}

这样就可以了

作者: luluwenwen   发布时间: 2011-12-21

引用 1 楼 luluwenwen 的回复:

unsigned short **pixData1 = NULL;
pixData1 = (unsigned short**)malloc(sizeof(unsigned short*)*M);

for(int i=0; i<M; i++)
{
  pixData1[i] = malloc(sizeof(unsigned short)*N);
}

这样就可以了
++

作者: qwer_boo   发布时间: 2011-12-21

unsigned short* pixelData1 = new unsigned short [M*N];

然后自己计算下标:

例如 pixelData1[3][4]转换成: pixelData[3 * N + 4];

作者: mingliang1212   发布时间: 2011-12-21

引用 1 楼 luluwenwen 的回复:

unsigned short **pixData1 = NULL;
pixData1 = (unsigned short**)malloc(sizeof(unsigned short*)*M);

for(int i=0; i<M; i++)
{
  pixData1[i] = malloc(sizeof(unsigned short)*N);
}

这样就可以了

学习了,,,~

作者: shenxinji   发布时间: 2011-12-21

C/C++ code
    unsigned short **pixelData1=new unsigned short*[M];
    for(int i=0;i<M;++i)
        pixelData1[i]=new unsigned short[N];

    // delete
    for(int i=0;i<M;++i)
        delete [] pixelData1[i];
    delete [] pixelData1;

作者: yisikaipu   发布时间: 2011-12-21

如果不想动态申请内存,设一个最大值的M,N,用全程变量即可
#define MAXN 5000
#define MAXM 5000
unsigned short pixelData1[MAXM][MAXN]
这样应该效率最高,且一般编译器全局变量缺省会清0的
缺点是占内存大,但这个也没问题
32 位windows下用的是虚存,每个进程用户最大可用2G,

作者: keiy   发布时间: 2011-12-21