| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 748 人关注过本帖
标题:为什么老是有内存错误,感觉没问题啊
只看楼主 加入收藏
任重道远
Rank: 1
等 级:新手上路
帖 子:57
专家分:7
注 册:2015-9-12
结帖率:66.67%
收藏
 问题点数:0 回复次数:17 
为什么老是有内存错误,感觉没问题啊
程序代码:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAX 3276
int main(void)
{
    int count,i,j,k,n1,n2,weight,n,e,mindist;
    int vex[n],edge[n][n];
    int dist[n],prev[n],s[n];
    clock_t start,end;
    for(count=0;count<10;count++)
    {
        printf("请输入顶点数和边数,中间用空格隔开:");
        scanf("%d%d",&n,&e);
        //邻接矩阵的初始化:
        for(i=0;i<n;i++)
        {
            vex[i]=i;
        }
        for(i=0;i<n;i++)
        {
            for(j=0;j<n;j++)
            edge[i][j]=MAX;                          //显示这行造成内存错误
        }
        srand((unsigned)time(NULL));
        for(k=0;k<e;k++)
        {
            n1=rand()%n;
            n2=rand()%n;
            weight=rand()%100+1;
            edge[n1][n2]=weight;
        }                              //完成初始化
        start=clock();
        //开始Dijkstra算法
        for(i=0;i<n;i++)
        {
            dist[i]=edge[0][i];
            s[i]=0;
            if(dist[i]==MAX)
                prev[i]=-1;
            else
                prev[i]=0;
        }
        s[0]=1;
        dist[0]=0;
        for(i=0;i<n;i++)
        {
            mindist=MAX;
            for(j=0;j<n;j++)
            {
                if(s[j]==0&&dist[j]<mindist)
                {
                    mindist=dist[j];
                    k=j;
                }
            }
            s[k]=1;
            for(j=0;j<n;j++)
            {
                if(s[j]==0&&dist[j]>dist[k]+edge[k][j])
                {
                    dist[j]=dist[k]+edge[k][j];
                    prev[j]=k;
                }
            }
        }
        //输出起始点到各个点的最短距离:
        for(i=0;i<n;i++)
        {
            printf("起始点到点%d的最短距离为%d\n",i,dist[i]);
        }                 //Dijkstra算法完成。
        end=clock();
        printf("当顶点数为%d时,所用的时间为%d毫秒。\n",n,end-start);
    }
}
搜索更多相关主题的帖子: count 
2015-10-12 15:48
诸葛欧阳
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:流年
等 级:贵宾
威 望:82
帖 子:2790
专家分:14619
注 册:2014-10-16
收藏
得分:0 
要用定长数组

一片落叶掉进了回忆的流年。
2015-10-12 15:54
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
:-)

授人以渔,不授人以鱼。
2015-10-12 15:55
任重道远
Rank: 1
等 级:新手上路
帖 子:57
专家分:7
注 册:2015-9-12
收藏
得分:0 
回复 2楼 诸葛欧阳
我把数组定义中的n换为1000,感觉数字不大啊,为什么还是内存错误,是我电脑的问题吗?
2015-10-12 16:17
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
你認為這個數組的總尺寸是多大?它該放在哪?

授人以渔,不授人以鱼。
2015-10-12 16:21
任重道远
Rank: 1
等 级:新手上路
帖 子:57
专家分:7
注 册:2015-9-12
收藏
得分:0 
回复 2楼 诸葛欧阳
我电脑内存2g的。。。
2015-10-12 16:23
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:0 
1000*1000*4=4M

能编个毛线衣吗?
2015-10-12 16:25
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
你電腦內存2G跟局部數組可以有多大有什麼關係?

授人以渔,不授人以鱼。
2015-10-12 16:26
任重道远
Rank: 1
等 级:新手上路
帖 子:57
专家分:7
注 册:2015-9-12
收藏
得分:0 
回复 5楼 TonyDeng
数组用来存放边的权值信息,数组应该是放在内存中的,n为顶点数,e为边数,我的n大致最多设置为700,但其他人的n可以设置为10000以上。。。我认为程序没有问题啊,因为700以下的点都可以运行。。我也不知道我说的是不是版主想问的。。
2015-10-12 16:28
任重道远
Rank: 1
等 级:新手上路
帖 子:57
专家分:7
注 册:2015-9-12
收藏
得分:0 
回复 8楼 TonyDeng
似乎没有什么问题
2015-10-12 16:30
快速回复:为什么老是有内存错误,感觉没问题啊
数据加载中...
 
   



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

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