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

Sign in to follow this  
bertolo

savingsv4

Recommended Posts

bertolo

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

Share this post


Link to post
Share on other sites
pmg

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! :)


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Share this post


Link to post
Share on other sites
bertolo

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

Share this post


Link to post
Share on other sites
pmg
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.


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Share this post


Link to post
Share on other sites
bertolo

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?

Share this post


Link to post
Share on other sites
pmg
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.


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Share this post


Link to post
Share on other sites
bertolo

é 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

Share this post


Link to post
Share on other sites
pmg

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


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Share this post


Link to post
Share on other sites
pmg

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.


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Share this post


Link to post
Share on other sites
bertolo

LOOOOOOOOOOOOOOOOOOOOOO....

...

...

...

OOOOOOOOOOOOOOOOOOOOOOOOL

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

ya vou tirar variaveis globais

looool

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.