c-程序在main处就出现段错误是怎么回事啊?求教

问题描述

程序在main处就出现段错误是怎么回事啊?求教


#include
#include
#include
#include
typedef char InfoPtr;
typedef char VertexType[4];
typedef int VRType;
#define INFINITY 100000
#define MAXSIZE 100
typedef int PathMatrix[MAXSIZE][MAXSIZE][MAXSIZE];
typedef int ShortPathLength[MAXSIZE][MAXSIZE];
typedef enum{DG, DN, UG, UN
}GraphKind;
typedef struct
{
VRType adj;
InfoPtr *info;
}ArcNode, AdjMatrix[MAXSIZE][MAXSIZE];
typedef struct
{
VertexType vex[MAXSIZE];
AdjMatrix arc;
int vexnum, arcnum;
GraphKind kind;
}MGraph;
typedef struct
{
int row;
int col;
int weight;
} GNode;
void CreateGraph(MGraph *N, GNode *value, int vnum, int arcnum, VertexType *ch);
void DisplayGraph(MGraph N);
void Floyd(MGraph N, PathMatrix path, ShortPathLength dist);
void main()
{
int w, u, v, vnum = 3, arcnum = 4;
MGraph N;
GNode value[] = {{0,1,5}, {1,0,10}, {1,2,6}, {2,0,9}};
VertexType ch[] = {"v0", "v1", "v2"};
PathMatrix path;
ShortPathLength dist;
CreateGraph(&N, value, vnum, arcnum, ch);
for(v = 0; v < N.vexnum; v++)
N.arc[v][v].adj = 0;
DisplayGraph(N);
Floyd(N, path, dist);
printf("顶点之间的最短路径长度矩阵dist:n");
for(u = 0; u < N.vexnum; u++)
{
for(v = 0; v < N.vexnum; v++)
printf("%6d", dist[u][v]);
printf("n");
}
for(u = 0; u < N.vexnum; u++)
for(v = 0; v < N.vexnum; v++)
if(u != v)
printf("%s到%s的最短路径为%dn", N.vex[u], N.vex[v], dist[u][v]);
printf("各顶点之间的最短路径所经过的顶点:n");
for(u = 0; u < N.vexnum; u++)
for(v = 0; v < N.vexnum; v++)
if(u != v)
{
printf("由%s到%s经过: ", N.vex[u], N.vex[v]);
for(w = 0; w < N.vexnum; w++)
if(path[u][v][w] == 1)
printf("%s ", N.vex[w]);
printf("n");
}
}
void CreateGraph(MGraph *N, GNode *value, int vnum, int arcnum, VertexType *ch)
{
int i, j, k, w, InfoFlag, len;
char s[MAXSIZE];
VertexType v1, v2;
N->vexnum = vnum;
N->arcnum = arcnum;
for(i = 0; i < vnum; i++)
strcpy(N->vex[i], ch[i]);
for(i = 0; i < N->vexnum; i++)
for(j = 0; j < N->vexnum; j++)
{
N->arc[i][j].adj = INFINITY;
N->arc[i][j].info = NULL;
}
for(k = 0; k < arcnum; k++)
{
i = value[k].row;
j = value[k].col;
N->arc[i][j].adj = value[k].weight;
}
N->kind = DN;
}

void DisplayGraph(MGraph N)
{
int i, j;
printf("有向网具有%d个顶点%d条弧,顶点依次是:", N.vexnum, N.arcnum);
for(i = 0; i < N.vexnum; ++i)
{
printf("%s ", N.vex[i]);
}
printf("n有向网N的:n");
printf("序号i=");
for(i = 0; i < N.vexnum; i++)
{
printf("%11d", i);
}
printf("n");
for(i = 0; i < N.vexnum; i++)
{
printf(" %6-d ", i);
for(j = 0; j < N.vexnum; j++)
printf("%-11d", N.arc[i][j].adj);
printf("n");
}
}
void Floyd(MGraph N, PathMatrix path, ShortPathLength dist)
{
int u, v, w, i;
for(v = 0; v < N.vexnum; v++)
for(w = 0; w < N.vexnum; w++)
{
dist[v][w] = N.arc[v][w].adj;
for(u = 0; u < N.vexnum; u++)
path[v][w][u] = 0;
if(dist[v][w] < INFINITY)
{
path[v][w][v] = 1;
path[v][w][w] = 1;
}
}
for(u = 0; u < N.vexnum; u++)
for(v = 0; v < N.vexnum; v++)
for(w = 0; w < N.vexnum; w++)
if(dist[v][u] < INFINITY && dist[u][w] < INFINITY
&& dist[v][u] + dist[u][w] < dist[v][w])
{
dist[v][w] = dist[v][u] + dist[u][w];
for(i = 0; i < N.vexnum; i++)
path[v][w][i] = path[v][u][i] || path[u][w][i];
}
}

解决方案

这是头文件没复制上
#include
#include
#include
#include

解决方案二:

“InfoPtr *info N->arc[i][j].info = NULL ”通过malloc来分配内存试试

时间: 2024-11-03 01:39:51

c-程序在main处就出现段错误是怎么回事啊?求教的相关文章

优雅处理段错误

摘要:某些进程在结束前必须要处理一些额外的过程才能结束,尤其是数据存储的模块,进程停止前为保证数据的完整性可能要做一些事情,如果发生段错误,这时就需要先截获segv信号,处理完后再让程序出core一般进程收到段错误信号默认是dump core文件然后退出,但有些进程在退出时需要处理额外的过程才能结束,这时就不能让信号执行默认的动作了,我们就需要截获段错误信号,然后在信号处理函数中处理额外过程,我们称之为other_function,但是我们处理完后其实还是需要让程序core出来,以便知道是哪儿出

C++ 程序不一定从 main 处开始执行

C++程序我们一般写程序都知道,是从main开始执行,不过,也有例外,比如以下这段程序 #include <iostream> #include <stdlib.h> using namespace std; class A { public: A() { cout << "I come here before main()!" << endl; f(); } static void f() { cout << "I

file-solaris下编译的程序执行是出现段错误

问题描述 solaris下编译的程序执行是出现段错误 编译器版本Reading specs from /usr/sfw/lib/gcc/sparc-sun-solaris2.10/3.4.3/specs Configured with: /sfw10/builds/build/sfw10-patch/usr/src/cmd/gcc/gcc-3.4.3/configure --prefix=/usr/sfw --with-as=/usr/ccs/bin/as --without-gnu-as --

在ubuntu使用gcc编译一个基本签名算法出现 段错误 核心已转储 麻烦给看看程序有什么错误。

问题描述 在ubuntu使用gcc编译一个基本签名算法出现 段错误 核心已转储 麻烦给看看程序有什么错误. 可能程序存在不止一个错误,如果可以,麻烦一一指出 如果哪位高手能帮忙让程序跑出结果,我把剩下的140C送给他作为感谢! #include "pbc.h" int main(void) { pairing_t pairing; element_t g, h; element_t public_key, sig; element_t secret_key; element_t tem

printf-段错误:您的程序发生段错误,可能是数组越界,这是怎么回事

问题描述 段错误:您的程序发生段错误,可能是数组越界,这是怎么回事 #include<stdio.h> int main(void) { int N,p,i,j,index,temp; int M; int input[10001]; int cnt[10001]; scanf("%d%d",&N,&p); for(i=0;i<N;i++) { scanf("%d",input[i]); } for(i=0;i<N;i++)

linux-注释掉printf语句程序出现段错误

问题描述 注释掉printf语句程序出现段错误 最近在Linux下开发一个软件,为了调试方便加入了printf语句输出相关变量的值,开发完成后软件运行很正常,可当我把printf语句注释掉后再运行软件却总是出现segment fault,若把printf语句加上又能正常运行,按理说注释掉printf语句不应该会引起此类错误呀,搞得我一头雾水,还望大神们指点迷津 解决方案 可能你注释的时候没有注意括号和if语句 解决方案二: 这个不应该是printf引起的,看是不是注释了影响了代码的处理逻辑等 解

内存泄露-在Cortext-A8的板子上运行程序,malloc出现段错误

问题描述 在Cortext-A8的板子上运行程序,malloc出现段错误 PLNode Create_list_head() { PLNode head = NULL; //printf("size: %xn",sizeof(struct List_Node)); head = (PLNode)malloc(sizeof(LNode)); if(head == NULL) { goto Err1; } INIT_LIST_HEAD(&head->list); return

.net-求注释程序!!!最好一段一注释!!!,不行一行也行!!!!

问题描述 求注释程序!!!最好一段一注释!!!,不行一行也行!!!! namespace SoccerVIP { public partial class Form2 : Form { DataSet myDataSet;//存放从数据库取来的数据的. OleDbConnection myOleConn;//连接对象,建立本程序和数据库的连接 OleDbDataAdapter myDataAdapter;//用来执行SQL命令 public Form2() { InitializeCompone

《UNIX网络编程 卷1:套接字联网API(第3版)》——8.3 UDP回射服务器程序:main函数

8.3 UDP回射服务器程序:main函数 现在,我们用UDP重新编写第5章中简单的回射客户/服务器程序.我们的UDP客户程序和服务器程序依循图8-1中所示的函数调用流程.图8-2描述了它们所使用的函数,图8-3则给出了服务器程序的main函数. 创建UDP套接字,捆绑服务器的众所周知端口7~12 我们通过将socket函数的第二个参数指定为SOCK_DGRAM(IPv4协议中的数据报套接字)创建一个UDP套接字.正如TCP服务器程序的例子,用于bind的服务器IPv4地址被指定为INADDR_