首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >找不到分段故障的位置

找不到分段故障的位置
EN

Stack Overflow用户
提问于 2011-04-30 02:39:59
回答 4查看 4.6K关注 0票数 0

我已经编程一段时间了,不是很多,但是我似乎真的很难找到分段错误在哪里,我已经尝试了几乎所有的方法:(.这是一个学校项目,老师通常不会在这方面提供帮助。

好了,下面是代码:

代码语言:javascript
复制
#include "funcoes2.h"
#include <stdlib.h>
#include <stdio.h>
#include <string.h>

listaa total_aero = NULL;

void guarda_voo()
{
    listaa t; /* struct list of airports */
    voo novo_voo;
    aeroporto novo_aeroporto1;
    aeroporto novo_aeroporto2;


    scanf("%s %s %s %d:%d %s %f\n", novo_voo.codigo, novo_voo.aero_partida, novo_voo.aero_chegada, &novo_voo.hora_partida, &novo_voo.minuto_partida, novo_voo.hora_chegada, &novo_voo.preco);

    for(t=total_aero; t != NULL; t = t->prox){
        if(!strcmp(t->naero.codigo, novo_voo.aero_partida))
            break;
    }

    if(t == NULL){
        insere_aeroporto(total_aero, novo_aeroporto1); /* adds an airport to the list, I also think that it won't reach here when executing */
        strcpy(total_aero->naero.codigo, novo_voo.aero_partida);
        total_aero->naero.voos_saem++;
        strcpy(total_aero->naero.aero_barato, novo_voo.aero_chegada);
        strcpy(total_aero->naero.aero_tarde, novo_voo.aero_chegada);
        total_aero->naero.preco_barato=novo_voo.preco;
        total_aero->naero.hora_tarde=novo_voo.hora_partida;
        total_aero->naero.minuto_tarde=novo_voo.minuto_partida;
        total_aero->naero.situacao='a';
        total_aero->naero.voos = NULL;
        insere_voo((total_aero->naero).voos, novo_voo);
        }
    else{
        t->naero.voos_saem++;
        if(novo_voo.preco < (t->naero.preco_barato)){
            t->naero.preco_barato=novo_voo.preco;
            strcpy(t->naero.aero_barato, novo_voo.aero_chegada);
        };
        if((t->naero.hora_tarde<novo_voo.hora_partida) || (t->naero.hora_tarde==novo_voo.hora_partida && t->naero.minuto_tarde<novo_voo.minuto_partida)){
            (t->naero.hora_tarde=novo_voo.hora_partida);
            (t->naero.minuto_tarde=novo_voo.minuto_partida);
            strcpy(t->naero.aero_tarde, novo_voo.aero_chegada);
        }
        insere_voo(t->naero.voos, novo_voo);
    }


    for(t=total_aero; t != NULL; t = t->prox){

        if(!strcmp(t->naero.codigo, novo_voo.aero_chegada)){
            t->naero.voos_chegam++;
            return;
        }
    }

提前谢谢,如果有什么不清楚的地方,请告诉我,我会尽量解释的

我将把.h文件放在这里:

代码语言:javascript
复制
 typedef struct _st_voo{
char codigo[7];
char aero_partida[4];
char aero_chegada[4];
int hora_partida;
int minuto_partida;
char hora_chegada[6];
float preco;
 }voo;



 struct nodev {
voo nvoo;
struct nodev *prox;
 };
 typedef struct nodev *listav;



 typedef struct _st_aeroporto{
char codigo[4];
int voos_saem;
int voos_chegam;
char aero_barato[4];
char aero_tarde[4];
float preco_barato;
int hora_tarde;
int minuto_tarde;
char situacao;
listav voos;
 }aeroporto;


 struct nodea {
aeroporto naero;
struct nodea *prox;
 };
 typedef struct nodea *listaa;



 void guarda_voo();

 void info_aeroporto();

 void insere_voo(listav x, voo novo_voo);

 void remove_voo(listav x, voo cancelado);

 void insere_aeroporto(listaa x, aeroporto novo_aero);
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-04-30 02:45:35

你的代码输入全乱了。由于我们不能看到或执行所有代码,所以不太可能有人能够找到它。您有两个选项:

  • Right way printf:了解如何使用gdb:http://www.gnu.org/software/gdb/
  • Dirty way调试代码:使用
    • Right()在代码的不同部分将语句打印到控制台,以帮助您确定分段错误发生的位置和时间。
票数 2
EN

Stack Overflow用户

发布于 2011-04-30 02:48:42

Valgrind is your friend.

票数 2
EN

Stack Overflow用户

发布于 2011-04-30 02:45:09

啊,Google在这里是你的朋友,但我要说:很明显你需要一个调试器。如果你在Linux或UNIX操作系统上运行这个程序,那么你需要使用gdb (http://www.gnu.org/software/gdb/),并且在Windows平台上,Visual Studio和它的同类产品都有一个内置的调试器。如果您正在使用其中的一个来查找分段故障,那么应该不会花太多时间。

对于GDB,可以在http://sourceware.org/gdb/current/onlinedocs/gdb/Sample-Session.html#Sample-Session上获得调用示例,一个专门针对分段错误的示例位于以下链接:http://www.unknownroad.com/rtfm/gdbtut/gdbsegfault.html

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5835993

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档