C++程序运行后出现Program received signal SIGSEGV,Segmentation fault

#include<cstdio>#include<cstring>intt,max,m,n,z,x,y;intso[10001][1001];intnum[10001],... #include<cstdio>
#include<cstring>
int t,max,m,n,z,x,y;
int so[10001][1001];
int num[10001],a[10001],b[10001],c[10001],fa[10001];
void travel(int l){
for (int i=1;i<num[l];i++){
a[so[l][i]]=a[l]++;
travel(so[l][i]);
};
};
void travel1(int l){
c[l]=1;
if (l!=1 && c[fa[l]]==0){
a[fa[l]]=a[l]++;
b[fa[l]]=l;
travel1(fa[l]);
};
for (int i=1;i<num[l];i++)
if (c[so[l][i]]==0){
a[so[l][i]]=a[l]++;
b[so[l][i]]=l;
travel1(so[l][i]);
};
};
void travel2(int l){
if (z==(max--)/2){
printf("%d%c",l," ");
if (t==1) printf("%d",b[l]);
return;
};
z++;
travel2(b[l]);
};
int main(){
freopen("network.in","r",stdin);
freopen("network.out","w",stdout);
scanf("%d/n",n);
for (int i=2;i<n;i++){
scanf("%d",x);
num[x]++;
so[x][num[x]]=i;
fa[i]=x;
};
a[1]=0;
travel(1);
max=0;
for (int i=1;i<n;i++){
if (a[i]>max){
max=a[i];
y=i;
};
};
memset(a,0,sizeof(a));
a[y]=1;
c[y]=1;
b[y]=y;
travel1(y);
max=0;
for (int i=1;i<n;i++)
if (a[i]>max){
max=a[i];
y=i;
};
z=0;
if (max%2==1) t=0;
else t=1;
travel2(x);
return 0;
}
展开
 我来答
庍嗚A
2014-09-12 · 超过56用户采纳过TA的回答
知道答主
回答量:120
采纳率:0%
帮助的人:124万
展开全部
程序里执行了无效的内存引用。

对于不正确的内存处理,计算机程序可能抛出SIGSEGV。操作系统可能使用信号栈向一个处于自然状态的应用程序通告错误,由此,开发者可以使用它来调试程序或处理错误。
  在一个程序接收到SIGSEGV时的默认动作是异常终止。这个动作也许会结束进程,但是可能生成一个核心文件以帮助调试,或者执行一些其他特定于某些平台的动作。
是否可以解决您的问题?
bhtzu
2014-09-12 · TA获得超过1.1万个赞
知道大有可为答主
回答量:8088
采纳率:85%
帮助的人:4203万
展开全部
#include<cstdio>
#include<cstring>
int t,max,m,n,z,x,y;
int so[10001][1001]; 
int num[10001],a[10001],b[10001],c[10001],fa[10001];
void travel(int l){
for (int i=1;i<num[l];i++){
a[so[l][i]]=a[l]++;
travel(so[l][i]);
};
};
void travel1(int l){
c[l]=1;
if (l!=1 && c[fa[l]]==0){
a[fa[l]]=a[l]++;
b[fa[l]]=l;
travel1(fa[l]);
};
for (int i=1;i<num[l];i++)
if (c[so[l][i]]==0){
a[so[l][i]]=a[l]++;
b[so[l][i]]=l;
travel1(so[l][i]);
};
};
void travel2(int l){
if (z==(max--)/2){
printf("%d%c",l," ");
if (t==1) printf("%d",b[l]);
return;
};
z++;
travel2(b[l]);
};
int main(){
int i;////
freopen("network.in","r",stdin);
freopen("network.out","w",stdout);
scanf("%d/n",&n);////&
for (i=2;i<n;i++){
scanf("%d",&x);////
num[x]++;
so[x][num[x]]=i;
fa[i]=x;
};
a[1]=0;
travel(1);
max=0;
for (i=1;i<n;i++){
if (a[i]>max){
max=a[i];
y=i;
};
};
memset(a,0,sizeof(a)*sizeof(int));//*sizeof(int)
a[y]=1;
c[y]=1;
b[y]=y;
travel1(y);
max=0;
for (i=1;i<n;i++)
if (a[i]>max)
{
max=a[i];
y=i; 
}
z=0;
if (max%2==1) t=0;
else t=1;
travel2(x);
return 0;
}

逻辑没仔细看,修正了几处明显的语法错误,看带有注释的行。

追问
还是一样的貌似
追答
除了文件操作(即注释那两行,因为我这没文件,用屏幕输入),我这测试执行正常。
如果是文件操作的问题,那试试打开和写入使用"rb"和"wb"。
你的错误提示,问题应该集中在文件操作那里。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
我回来了调用
2014-09-12 · TA获得超过388个赞
知道小有建树答主
回答量:772
采纳率:0%
帮助的人:469万
展开全部
freopen("network.in","r",stdin);
freopen("network.out","w",stdout);
network.in, network.out在项目文件夹下创建这两个空白文件, 或者去掉这两句
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式