iagoac / mc202

Disciplina MC202 - Estruturas de Dados
GNU General Public License v3.0
17 stars 13 forks source link

Erros no lab12 #139

Closed eduarda-nicoletto closed 4 years ago

eduarda-nicoletto commented 4 years ago

Eu terminei hoje meu lab12 mas estou com um problema de segmentation fault. Já tive esse problema em outros momentos mas sempre consegui consertar. Dessa vez, meu programa imprime a resposta correta para os casos do enunciado e para os dois primeiros casos do SuSy, mas quando chega no terceiro, todos dão erro 139.

Pra tentar resolver esse problema, fui em algumas monitorias que me ajudaram muito, mas esse último erro não consegui resolver. Tentei colocar printf em um monte de lugar no código, mas quando compilo, nada é impresso, vai diretamente para segmentation fault.

Estou sem ideias do que fazer. Alguém saberia ajudar?

iagoac commented 4 years ago

@eduarda-nicoletto com estas poucas informações que você me deu, fica difícil de te ajudar.
Como você diz que nada é impresso, a única coisa que posso dizer é que você provavelmente tem algum erro no momento de alocação de suas variáveis.

Uma outra coisa que você também pode fazer é utilizar o valgrind para debugar seu código

eduarda-nicoletto commented 4 years ago

@iagoac Usando um debugger online, eu descobri que o segmentation fault acontece quando estou preenchendo a matriz de adjacência. Só para explicar, eu usei lista ligada para o grafo, mas também usei a matriz de adjacências como auxiliar para que no main seja mais fácil de acessar o tempo de percurso entre dois vértices.

Tem alguma forma de concertar isso ou devo eliminar a matriz e usar apenas o grafo para achar o tempo?

iagoac commented 4 years ago

@eduarda-nicoletto vou apagar sua última mensagem, pois não se deve colocar o código inteiro do laboratório desta forma aqui no Github. Assim, qualquer outro colega seu pode pegar e copiar seu código, o que será mostrado no detector de plágios.

Olhando seu código, eu consegui identificar alguns erros. Por exemplo, nas linhas

FP->fila=malloc(szsizeof(Item));
FP->index=malloc(szsizeof(int));

você não multiplicou sz pelo sizeof. É muito estranho para mim que isto não tenha acarretado nenhum erro de compilação.

Sua função p_no insere_vizinhos(p_no lista, int z, int peso) também está muito estranha, pois ela recebe um p_no como argumento e retorna outro p_no que, essencialmente, são os mesmos.


Tem alguma forma de concertar isso ou devo eliminar a matriz e usar apenas o grafo para achar o tempo?

Forma de concertar até tem. Mas utilizar duas estruturas de dados diferentes fica um pouco confuso... Acredito que seja melhor utilizar somente uma como forma de evitar erros e bugs no código.

eduarda-nicoletto commented 4 years ago

vou apagar sua última mensagem, pois não se deve colocar o código inteiro do laboratório desta forma aqui no Github. Assim, qualquer outro colega seu pode pegar e copiar seu código, o que será mostrado no detector de plágios.

Perdão, professor!! Quando começa a chegar o prazo de entrega, o cérebro vai ficando sem noção. Quanto a função insere_vizinhos, fiz similar ao dos slides. Não entendo o que poderia estar errado nela, me parece fazer sentido.

Vou trabalhar em cima desses erros que você comentou. Obrigada!

eduarda-nicoletto commented 4 years ago

@iagoac Consegui resolver os problemas e inclusive removi a matriz e algumas funções desnecessárias, mas agora o resultado dos testes abertos 7, 8, 10 dão errado. Alguma ideia do que pode ser? Todos são valores pouco acima do esperado

iagoac commented 4 years ago

@eduarda-nicoletto bem, provavelmente seu algoritmo ainda está errado 😭
Infelizmente, eu não vejo uma característica específica que estes três testes compartilhem para poder te ajudar assim