• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

bertolo

savingsv4

14 mensagens neste tópico

Boas!

O programa savingsv4 consiste num gestor de poupanças semanais. Em cada semana introduzem o valor poupado, o programa cria uma base de dados com o total poupado todas as semanas.

Tem mais algumas opções extra.

O código era muito grande pelo que decidi partilhar em rapidshare:

http://rapidshare.com/files/166793052/savingsv41.tar.html

*updated*

versao v6:

http://rapidshare.com/files/167060220/savingsv6.tar.html

aguardo os vossos comentários abraços

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

a) Se calhar o formato tar não é indicado para utilizadores de Windows.

Faz o download em zip.

b) Quando o ficheiro de dados não existe, o programa pára com a mensagem "Erro na abertura do ficheiro!". Proponho-te que consideres a inexistência do ficheiro como uma situação normal.

c) listar semanas quando o ficheiro está vazio deu-me o seguinte resultado:

"Semana: 1701153944 Saldo: 0.00"

Falta-te inicializar `topo` na função ler_ficheiro()

Para já é isto! :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

a) 7z extrai tar, zip e winrar lool. estou divorciado com a microsoft loool. =)

b) boa ideia. update coming

c) a mim diz memoria vazia. acho estranho. diz.me como fizeste para aparecer esse bug.

estou a pensar fazer um gui brevemente tb

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
diz.me como fizeste para aparecer esse bug.

Não fiz nada :)

Tenho o ficheiro de dados vazio (com 0 bytes), chamo o programa e escolho a opção 1 - Listar todas as semanas.

O resultado é

Semana: 1578613912  Saldo: 0.00

Isto porque, na função ler_ficheiro() não inicializas a variável topo.

struct semana *ler_ficheiro(void)
{
  struct semana *aux, *topo;
  /* ... */
  for (/* ... fscanf() ... */) {
    /* não executa */
  }
  return topo; /* topo não incializado! */
}

Além disso tens uns "memory leaks" no teu programa.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

saca ai de novo e ve outra vez. se esse bug permaneceu. nunca me deu esse erro continuo a achar estranho

repara:

ist158112@sigma01:~/savings$ ./savingsv4

Erro na abertura do ficheiro!

Ficheiro criado com o nome savings.txt!

                                                Menu savings

                                        1 - Listar todas as semanas

                                        2 - Estatisticas

                                        3 - Introduzir nova semana

                                        4 - Remover ultimo item

                                        5 - Guardar Altercaoes no ficheiro

                                        6 - Readme

                                        7 - Sair

Opcao:1

ATENCAO:MEMORIA VAZIA!!

                                                Menu savings

                                        1 - Listar todas as semanas

                                        2 - Estatisticas

                                        3 - Introduzir nova semana

                                        4 - Remover ultimo item

                                        5 - Guardar Altercaoes no ficheiro

                                        6 - Readme

                                        7 - Sair

Opcao:

que memory leaks?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
que memory leaks?

Supoe que meto 10 semanas quando corro o programa.

Fazes 10 mallocs e nenhum free :)

$ valgrind ./savingsv4
...
==16704== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 8 from 1)
==16704== malloc/free: in use at exit: 272 bytes in 17 blocks.
==16704== malloc/free: 19 allocs, 2 frees, 1,408 bytes allocated.
==16704== For counts of detected errors, rerun with: -v
==16704== searching for pointers to 17 not-freed blocks.
==16704== checked 73,760 bytes.
==16704==
==16704== LEAK SUMMARY:
==16704==    definitely lost: 272 bytes in 17 blocks.
==16704==      possibly lost: 0 bytes in 0 blocks.
==16704==    still reachable: 0 bytes in 0 blocks.
==16704==         suppressed: 0 bytes in 0 blocks.
==16704== Use --leak-check=full to see details of leaked memory.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

é suposto até fazer n mallocs para n semanas. só fará free se tu assim ordenares. quando o programa sai a memoria é reutilizada pelo so.

se o valgrind diz tenho de corrigir loool

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Estive a brincar com o teu código ... e acabei por alterá-lo muito.

Assim por alto, fiz isto:

a) o teu programa "fala" muito: tornei-o mais caladito.

b) o ficheiro com as informações pode ser indicado na command line

c) o número da semana desapareceu da struct semana

d) os floats passaram a double (e os scanfs foram alterados)

e) reestruturei muito do código da gestão de memória

Alterações aqui: http://rapidshare.com/files/166900141/savings-pmg.zip.html

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Alterei umas coisitas (*) e não me deu segfault!

Mas ...

Citação
==26093== ERROR SUMMARY: 4 errors from 2 contexts (suppressed: 8 from 1)

==26093== malloc/free: in use at exit: 599,480 bytes in 6,910 blocks.

==26093== malloc/free: 48,864 allocs, 41,954 frees, 11,566,746 bytes allocated.

12 mega!!!!

Citação
...

==26093== For counts of detected errors, rerun with: -v

==26093== searching for pointers to 6,910 not-freed blocks.

==26093== checked 913,400 bytes.

==26093==

==26093== LEAK SUMMARY:

==26093==    definitely lost: 54,148 bytes in 1,124 blocks.

==26093==      possibly lost: 58,592 bytes in 42 blocks.

==26093==    still reachable: 486,740 bytes in 5,744 blocks.

==26093==        suppressed: 0 bytes in 0 blocks.

(*) Separei o engine.h em dois ficheiros: engine.h (sem código!!!) e engine.c (sem definição de tipos)

Deparei-me com um erro "estranho" de compilação que me demorou ... praí ... 7 segundos a descobrir o que era. Vê lá se consegues fazer o programa sem a variável global "struct semana *lista".

Nunca usei GTK. Não te posso ajudar com os especificos dele ... 12 mega!!!! -- fonix.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

LOOOOOOOOOOOOOOOOOOOOOO....

...

...

...

OOOOOOOOOOOOOOOOOOOOOOOOL

estou a refazer o programa tb. vou ver se desta vez idento código.

ya vou tirar variaveis globais

looool

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora