怎样对二维数组动态内存分配?

swrd2014 2014-11-21 11:27:26
我要定义一个二维数组 a[N][2*N-1]
N=1000000000;
我在VC+6.0 上只能定义到a[100][1000
我查阅资料,定义大数组需要动态分配内存使用mallo函数,我不知道怎么使用,最后怎么释放求代码!
计算机4G内存
...全文
292 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
707wk 2014-11-22
  • 打赏
  • 举报
回复
引用 2 楼 turingo 的回复:
++,修改设计才是正道。 [quote=引用 1 楼 layershow 的回复:] // 分配 T * p = (T *)malloc(sizeof(T) * N * (2*N-1)); // 释放 free(p); 你搞这么大的数组,就是方案设计问题了,所以建议你别沿这条路往下走了 物理内存 4G 与程序能用的内存是两码事
[/quote]++++
hjtzdyh 2014-11-22
  • 打赏
  • 举报
回复
百度 MapViewOfFile 映射大文件
layershow 2014-11-21
  • 打赏
  • 举报
回复
// 分配 T * p = (T *)malloc(sizeof(T) * N * (2*N-1)); // 释放 free(p); 你搞这么大的数组,就是方案设计问题了,所以建议你别沿这条路往下走了 物理内存 4G 与程序能用的内存是两码事
liangkdm 2014-11-21
  • 打赏
  • 举报
回复
4G? 为什么要这么大 修改设计方案吧
tery_sxd 2014-11-21
  • 打赏
  • 举报
回复
动态数组在小数据量的情况下可以的,但数据量大时,一般采用链表存储成文件的方式,在输入的同时,也保存成文件存到硬盘中,使用的时候在从文件中读取,可以使用ini,cvs等
赵4老师 2014-11-21
  • 打赏
  • 举报
回复
仅供参考
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
int **newarr2d(int rows,int cols) {
    int **p,i;

    p=(int **)malloc(rows*sizeof(int *));
    if (NULL==p) exit(1);
    for (i=0;i<rows;i++) {
        p[i]=(int *)malloc(cols*sizeof(int));
        if (NULL==p[i]) exit(1);
    }
    return p;
}
void deletearr2d(int **p,int rows) {
    int i;

    for (i=0;i<rows;i++) {
        free(p[i]);
    }
    free(p);
}
int main() {
    int **arr2d,i,j,r,c;

    r=4;
    c=5;
    //在堆中开辟一个4×5的二维int数组
    arr2d=newarr2d(r,c);
    for (i=0;i<r;i++) {
        for (j=0;j<c;j++) {
            arr2d[i][j]=i*c+j;
        }
    }
    for (i=0;i<r;i++) {
        for (j=0;j<c;j++) {
            printf(" %2d",arr2d[i][j]);
        }
        printf("\n");
    }
    deletearr2d(arr2d,r);

    r=6;
    c=3;
    //在堆中开辟一个6×3的二维int数组
    arr2d=newarr2d(r,c);
    for (i=0;i<r;i++) {
        for (j=0;j<c;j++) {
            arr2d[i][j]=i*c+j;
        }
    }
    for (i=0;i<r;i++) {
        for (j=0;j<c;j++) {
            printf(" %2d",arr2d[i][j]);
        }
        printf("\n");
    }
    deletearr2d(arr2d,r);

    return 0;
}
//  0  1  2  3  4
//  5  6  7  8  9
// 10 11 12 13 14
// 15 16 17 18 19
//  0  1  2
//  3  4  5
//  6  7  8
//  9 10 11
// 12 13 14
// 15 16 17
//
如果还不够用的话,用文件读写模拟内存读写,参考_lseeki64函数。
图灵狗 2014-11-21
  • 打赏
  • 举报
回复
++,修改设计才是正道。
引用 1 楼 layershow 的回复:
// 分配 T * p = (T *)malloc(sizeof(T) * N * (2*N-1)); // 释放 free(p); 你搞这么大的数组,就是方案设计问题了,所以建议你别沿这条路往下走了 物理内存 4G 与程序能用的内存是两码事

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧