| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 751 人关注过本帖
标题:为什么老是有内存错误,感觉没问题啊
取消只看楼主 加入收藏
任重道远
Rank: 1
等 级:新手上路
帖 子:57
专家分:7
注 册:2015-9-12
结帖率:66.67%
收藏
 问题点数:0 回复次数:8 
为什么老是有内存错误,感觉没问题啊
程序代码:
#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: 1
等 级:新手上路
帖 子:57
专家分:7
注 册:2015-9-12
收藏
得分:0 
回复 2楼 诸葛欧阳
我把数组定义中的n换为1000,感觉数字不大啊,为什么还是内存错误,是我电脑的问题吗?
2015-10-12 16:17
任重道远
Rank: 1
等 级:新手上路
帖 子:57
专家分:7
注 册:2015-9-12
收藏
得分:0 
回复 2楼 诸葛欧阳
我电脑内存2g的。。。
2015-10-12 16:23
任重道远
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
任重道远
Rank: 1
等 级:新手上路
帖 子:57
专家分:7
注 册:2015-9-12
收藏
得分:0 
回复 3楼 TonyDeng
那么应该是程序的问题么?但是我查看了好多好多边,真的没有发现问题,代码的主要功能是输入顶点数和边数,用迪杰斯特拉算法来寻找最短路径,并记录所用时间,求版主帮忙看看到底有什么问题啊。
2015-10-12 16:50
任重道远
Rank: 1
等 级:新手上路
帖 子:57
专家分:7
注 册:2015-9-12
收藏
得分:0 
回复 13楼 TonyDeng
哦哦 刚看到还有第二页我再看看
2015-10-12 16:52
任重道远
Rank: 1
等 级:新手上路
帖 子:57
专家分:7
注 册:2015-9-12
收藏
得分:0 
回复 15楼 TonyDeng
是的,设置为全局变量之后就没问题了谢谢版主
2015-10-12 16:54
任重道远
Rank: 1
等 级:新手上路
帖 子:57
专家分:7
注 册:2015-9-12
收藏
得分:0 
回复 15楼 TonyDeng
嗯嗯,那个我说的小值能用是把n值改为数值,感谢版主,今天真的是长知识了,谢谢
2015-10-12 16:57
快速回复:为什么老是有内存错误,感觉没问题啊
数据加载中...
 
   



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

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