| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 989 人关注过本帖
标题:c语言数据结构 (严版)图 GetVex(G,V)操作有问题
取消只看楼主 加入收藏
同生缘
Rank: 1
等 级:新手上路
帖 子:32
专家分:0
注 册:2007-11-18
结帖率:0
收藏
已结贴  问题点数:10 回复次数:2 
c语言数据结构 (严版)图 GetVex(G,V)操作有问题
代码实现:
程序代码:
/* c7-1.h 图的数组(邻接矩阵)存储表示 */

 #define INFINITY INT_MAX /* 用整型最大值代替∞ */

 #define MAX_VERTEX_NUM 20 /* 最大顶点个数 */

 typedef enum{DG,DN,AG,AN}GraphKind; /* {有向图,有向网,无向图,无向网} */

 typedef struct

 {
   VRType adj; /* 顶点关系类型。对无权图,用1(是)或0(否)表示相邻否; */
           /* 对带权图,c则为权值类型 */
   InfoType *info; /* 该弧相关信息的指针(可无) */

 }ArcCell,AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];

 typedef struct

 {
   VertexType vexs[MAX_VERTEX_NUM]; /* 顶点向量 */
   AdjMatrix arcs; /* 邻接矩阵 */
   int vexnum,arcnum; /* 图的当前顶点数和弧数 */
   GraphKind kind; /* 图的种类标志 */

 }MGraph;

程序代码:
 VertexType* GetVex(MGraph G,int v)

 { /* 初始条件: 图G存在,v是G中某个顶点的序号。操作结果: 返回v的值 */
   if(v>=G.vexnum||v<0)
     exit(ERROR);
   return &G.vexs[v];

 }


编译时提示 返回local value,因为函数入口是按值传递,所以返回的应该是函数里的局域变量的地址,函数调用后
,该变量销毁,所以得到函数返回的指针会出错。
所以书本的操作设计有问题,对吗?
搜索更多相关主题的帖子: 最大值 color c语言 
2011-02-16 01:21
同生缘
Rank: 1
等 级:新手上路
帖 子:32
专家分:0
注 册:2007-11-18
收藏
得分:0 
我看是因为编译器的问题?GCC Linux ,    VC windows
复制数组是 堆上分配,那就无问题,变量不会销毁,但是每一调用就复制一个数组,消耗量大。
如果是栈上分配,就会出错吧

理性爱国。
理性上网。
2011-02-28 23:33
同生缘
Rank: 1
等 级:新手上路
帖 子:32
专家分:0
注 册:2007-11-18
收藏
得分:0 
回复 5楼 寒风中的细雨
我的问题是结构体传值,看来我把问题复杂化。
结构体里的数组变量,也是一个变量。
理应是在栈上分配内存。
可是在winows竟然可以正常运行,查过原数组和副本数组地址一样,可
见编译器做了一个优化,直接使用参数里面的数组变量,目的大概是避免大量复制。
机制大概如  char * p = "hello";
            char * d = "hello";
 然后两个指针指向同一块内存,看具体编译器。
           

理性爱国。
理性上网。
2011-03-18 10:27
快速回复:c语言数据结构 (严版)图 GetVex(G,V)操作有问题
数据加载中...
 
   



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

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