Receber por parametro NULL esperando char*

TheRunner

Power Member
Boas

Sinceramente não sei se o titulo está correcto mas pronto. Estou a fazer um projecto em c em que tenho de trabalhar com listas. O Professor pede para fazer uma função que me encontre uma musica na lista (cada musica é composta pelo titulo, artista e duração) e o cabeçalho da função é assim:

int encontrar(Lista l, char *titulo, char *artista)
Esta vai devolver a posição em que a musica se encontra. A outra condição que o stor pede é que um dos valores (titulo ou artista) possa ser enviado como NULL ou seja:

posicao = encontrar(l, NULL, "Starlight");
Eu fiquei um bocado desconfiado quando vi isto no enunciado e quando chegou a altura de fazer a função pus esta a funcionar perfeitamente quando recebia os dois elementos (titulo e musica), mas quando chegou a altura de exprimentar com alguns dos valores a NULL pus um printf na primeira linha da função e quando a mando exercutar nem o printf imprime porque dá logo segmentation fault.

É possível de fazer o que o stor me pede? :s

Cumps
 
Ola

sim pode ser feito, mas tens que testar se o parametro vem a null ou nao, por exemplo:

if (titulo != null){
printf("%s", titulo);
}

e assim distingues se vais usar o titulo como critério da pesquisa na lista ou nao.
 
Sim eu pensei nisso, mas é que ele nem chega a ir para a pesquisa propriamente dita. Tal como disse no post eu meti um printf na primeira linha da função e nada foi impresso apenas seg fault.
 
Falta uma vírgula a separar os parâmetros "Lista l" e "char *nome".

deve ser typo... quer dizer, se faltasse a virgula ele compilava? :D

Já agora, eu há uns meses deparei-me com um seg. fault por tar a usar um NULL quando não era suposto e também tinha um printf que tbm não aparecia e tava 6 linhas acima do erro propriamente dito... Isto para dizer que os compiladores são chatos e que nada te garante que ele não tenha passado o printf :P Faz mas é um debug decente com breakpoint no inicio da função e vê o que realmente se passa ;)
 
Última edição:
deve ser typo... quer dizer, se faltasse a virgula ele compilava? :D

Já agora, eu há uns meses deparei-me com um seg. fault por tar a usar um NULL quando não era suposto e também tinha um printf que tbm não aparecia e tava 6 linhas acima do erro propriamente dito... Isto para dizer que os compiladores são chatos e que nada te garante que ele não tenha passado o printf :P Faz mas é um debug decente com breakpoint no inicio da função e vê o que realmente se passa ;)

A virgula está lá no programa a copiar para aqui devo-a ter apagado lol..

Não sei bem como se faz um debug, mas vou tentar ;)

Obrigado pela ajuda
 
A virgula está lá no programa a copiar para aqui devo-a ter apagado lol..

Não sei bem como se faz um debug, mas vou tentar ;)

Obrigado pela ajuda

Fazer debug não tem nada de mais... Se estiveres no linux compila com a flag -g e depois corre o programa no gdb. Caso não saibas como trabalhar com o gdb (mas devias :P) podes sempre instalar o ddd que é um front end gráfico do gdb e aí tens obrigação de te "desenrascar" :P

Já agora, experimenta comentar toda a função "encontrar e deixa apenas o printf e um return 0. Caso não dê seg fault então é mesmo algo q fazes no meio da função e caso continue a dar então é algo de errado q tás a fazer antes de chamar a função :P
 
Última edição:
Para fazer debug podes usar o GDB (desde que tenas compilado com a flag "-g"):
Supondo que o teu executável tem o nome "prog":
Código:
gdb prog //indica ao gdb para debuggar o prog
run //inicia a execução do prog
where //dá a localização do problema
list //mostra o bloco de código onde está a dar erro
break main //cria um breakpoint na main
n //avança uma instrução
p v //mostra o valor da variável v
step //entra na execucao da próxima instrução
c //deixa o programa executar até ao fim
 
Back
Topo