标题:关于多维数组动态内存分配
只看楼主
一片草
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2016-8-9
结帖率:0
已结贴  问题点数:20 回复次数:3 
关于多维数组动态内存分配
程序运行一半就崩溃了,电脑也会卡住,动态内存分配也会不够吗?

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
int main()
{
    double **a;//定义92*92A区各点最短路径
    double ****var;//定义各种分配方案时的方差
    int *****set;//定义各种方案时各点的最近站台
    double *****rate;//定义各种方案下24个服务台发案率
    FILE *fp1;
    int i,j,k,l,m,t;
    a=(double **)malloc(sizeof(double *)*92);
    for(i=0;i<92;i++)
    {
        a[i]=(double *)malloc(sizeof(double)*92);
    }
    var=(double ****)malloc(sizeof(double ***)*69);
    for(i=0;i<69;i++)
    {
        var[i]=(double ***)malloc(sizeof(double **)*92);
        for(j=0;j<69;j++)
        {
            var[i][j]=(double **)malloc(sizeof(double *)*92);
            for(k=0;k<69;k++)
            {
                var[i][j][k]=(double *)malloc(sizeof(double )*92);
                for(l=0;l<69;l++)
                {
                    var[i][j][k][l]=0.00;
                }
            }
        }
    }
   
    set=(int *****)malloc(sizeof(int ****)*69);
    printf("\n333");
    for(i=0;i<69;i++)
    {
        set[i]=(int ****)malloc(sizeof(int ***)*92);
        for(j=0;j<69;j++)
        {
            set[i][j]=(int ***)malloc(sizeof(int **)*92);
            for(k=0;k<69;k++)
            {
                set[i][j][k]=(int **)malloc(sizeof(int *)*92);
                for(l=0;l<69;l++)
                {
                    set[i][j][k][l]=(int *)malloc(sizeof(int )*92);
                    for(m=0;m<92;m++)
                    {
                        set[i][j][k][l][m]=0;
                    }
                }
            }
        }
    }
    rate=(double *****)malloc(sizeof(double ****)*69);
    for(i=0;i<69;i++)
    {
        rate[i]=(double ****)malloc(sizeof(double ***)*92);
        for(j=0;j<69;j++)
        {
            rate[i][j]=(double ***)malloc(sizeof(double **)*92);
            for(k=0;k<69;k++)
            {
                rate[i][j][k]=(double **)malloc(sizeof(double *)*92);
                for(l=0;l<69;l++)
                {
                    rate[i][j][k][l]=(double *)malloc(sizeof(double )*92);
                    for(m=0;m<24;m++)
                    {
                        rate[i][j][k][l][m]=0.00;
                    }
                }
            }
        }
    }
   
    fp1=fopen("D:\\2011B\\distance.txt","r");
    if(fp1==0)
    {
        printf("can not open file\n");
        exit(1);
    }
    while(!feof(fp1))
    {
        for (i=0;i<92;i++)
        {    for(t=0;t<92;t++)
            {
            fscanf(fp1,"%lf",&a[i][t]);
            }
        }
    }
    printf("a[3][90]=%f\n",a[3][90]);
    for(i=0;i<92;i++)
    {
        free(a[i]);
    }
    for(i=0;i<69;i++)
    {
        for(j=0;j<69;j++)
        {
            for(k=0;k<69;k++)
            {
                free(var[i][j][k]);
            }
        }
    }
    for(i=0;i<69;i++)
    {
        for(j=0;j<69;j++)
        {
            for(k=0;k<69;k++)
            {
                for(l=0;l<69;l++)
                {
                    free(set[i][j][k][l]);
                }
            }
        }
    }
    for(i=0;i<69;i++)
    {
        for(j=0;j<69;j++)
        {
            for(k=0;k<69;k++)
            {
                for(l=0;l<69;l++)
                {
                    free(rate[i][j][k][l]);
                }
            }
        }
    }
    free(rate);
    free(set);
    free(var);
    free(a);
    fclose(fp1);
    return 0;
}
搜索更多相关主题的帖子: include double 服务台 动态 
2016-08-09 18:57
linlulu001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
注 册:2016-4-13
得分:7 
double * * * * * rate,5个*号69*92*92*92*92*8,也就是说,单单这一个数组这就要分配850MB左右的内存。
1kb=1024bt,1MB=1024kb。你自己算算你这四个数组分配的内存都过2GB了。
改小点试试吧。如果算法没错的情况下应该就能运行了。
2016-08-09 19:29
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:7 
里面错得一塌糊涂,数值多处对不上,你还是告诉别人你想干什么吧
2016-08-10 08:57
砖家的谎言
Rank: 12Rank: 12Rank: 12
等 级:禁止访问
威 望:30
帖 子:693
专家分:3898
注 册:2013-12-6
得分:7 
把你要做的说清楚,代码贴出来再说哪里出错,有什么解决不了的

我不是砖家,要努力成为砖家。
2016-08-10 11:36



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-467716-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.023987 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved