Programar em C - Função free() | Alocação Dinâmica Pt.3 - Aula 97

แชร์
ฝัง
  • เผยแพร่เมื่อ 18 ธ.ค. 2024

ความคิดเห็น • 41

  • @evanildofilho
    @evanildofilho 4 ปีที่แล้ว +4

    7 anos depois eu tô vendo aqui os vídeos pra tentar resolver as questões e você tá abrindo minha mente

  • @lyarodrigues9455
    @lyarodrigues9455 ปีที่แล้ว +1

    Eu to amando sua didática :) é de outro nível!

  • @Jeancarlo842
    @Jeancarlo842 2 หลายเดือนก่อน

    mano, nunk o youtube acertou tão bem ao recomendar seu canal, olha q procurei e não tinha mais encontrado, bem qndo estava com esse problema de gerenciamento dinâmico de memória voalá, vc aparece, muito obrigado...Estoui desenvolvendo para o mengadrive de 16bits e 2,5 mb de ram kkkk a briga por kbites está insana, mas alocando as memórias manualmente em blocos separados, vai evitart muitos bugs, vanos ver até onde vai esse motorola 68000

  • @franciscopovoas8798
    @franciscopovoas8798 2 ปีที่แล้ว

    Rapaz!!! Melhor didática para o assunto que eu encontrei.

  • @edvansousa1270
    @edvansousa1270 7 ปีที่แล้ว +1

    Excelentes aulas. Simplicidade e clareza de ideias. Vida longa ao canal.

  • @GabrielRodrigues-dw7vd
    @GabrielRodrigues-dw7vd 8 ปีที่แล้ว +5

    Muito obrigado professor pela ajuda, com certeza os videos me ajudaram bastante a fechar provas de programação na faculdade!!!

  • @jpmkcsgo745
    @jpmkcsgo745 11 ปีที่แล้ว

    Continue com as video aulas ! voce explica muito bem ! nao pare de fazer videos de C por favor, gracas a vc tudo fica mais facil mt obrigado !

  • @danilovitoria2304
    @danilovitoria2304 6 ปีที่แล้ว

    Esse canal foi a minha salvação pra aprender linguagem C; Muito obrigado!

  • @brunoamerico3605
    @brunoamerico3605 7 ปีที่แล้ว

    Cara, muito obrigado. Aula 96 e 97 me salvaram demais!

  • @vitormarqueti2532
    @vitormarqueti2532 7 ปีที่แล้ว +1

    Muito bom professor, pra ficar excelente o video seria bom alguns exercícios. Obrigado pela ajuda!

  • @joaoalexandre5326
    @joaoalexandre5326 3 ปีที่แล้ว

    Que cara bom!

  • @kaikealves1
    @kaikealves1 11 ปีที่แล้ว

    Muito boas suas aulas, espero que continue.

  • @Guihgo
    @Guihgo 9 ปีที่แล้ว

    inscrito número 43.100
    *MUITO BOM*

  • @raimundolima4817
    @raimundolima4817 9 ปีที่แล้ว

    assistir 10 videos todos muito bom baixei todosobrigado pela ajuda

  • @levi23244
    @levi23244 10 ปีที่แล้ว

    Ótima aula!

  • @putzz67767
    @putzz67767 7 ปีที่แล้ว

    Aula perfeita!

  • @juneira_
    @juneira_ 11 ปีที่แล้ว

    Realmente Rafael...

  • @monicaslv323
    @monicaslv323 9 ปีที่แล้ว +14

    Nos meus código em Dev, se eu posicionar a função free() antes da impressão, o valor se perde e imprime uns valores que parecem a posição da memoria.

    • @laisreis1745
      @laisreis1745 4 ปีที่แล้ว

      aconteceu o msm comigo, conseguiu descobrir o pq?

  • @JulioCesar-nx6lh
    @JulioCesar-nx6lh 11 ปีที่แล้ว

    Obrigado! Ótima explicação!

  • @jpmkcsgo745
    @jpmkcsgo745 11 ปีที่แล้ว

    Muito obg !

  • @ViictoRStormHD
    @ViictoRStormHD 7 ปีที่แล้ว +7

    No CodeBlocks, quando desaloquei, o ponteiro perdeu toda a referência que tinha sido alocada na chamada do malloc, ficando com lixo de memória na saída de dados. Da mesma forma que aconteceu com o calloc, não fica com valor 0 depois de ter desalocado.

    • @victornunes2762
      @victornunes2762 7 ปีที่แล้ว +2

      É pq quando vc desaloca com free vc está falando pro SO que não precisa mais daqueles endereços, portanto o SO pode colocar outros valores la dentro. Por isso é sempre bom colocar o ponteiro apontando pra null tbm.

  • @RafaelCamposNunes
    @RafaelCamposNunes 11 ปีที่แล้ว +2

    No Windows isso não acontece, ele desaloca a memória, e acho que ele perde a referência do p, mas mesmo assim ainda existe, quando esse código é executado:
    int *p = (int *) malloc(sizeof(int));
    *p = 125;
    free(p);
    printf("%d", *p);
    Ele mostra o lixo que está no pedaço da memória p

  • @MarioGWalker
    @MarioGWalker 7 ปีที่แล้ว

    Me ajudou demais em Analise e Estrutura de Dados na USP :D

    • @matteusgutemberg5603
      @matteusgutemberg5603 4 ปีที่แล้ว

      Imaginei que alunos da USP nem assistissem videoaulas de tão fodas que são haha

  • @gustavohellyanviegascorrea5099
    @gustavohellyanviegascorrea5099 2 ปีที่แล้ว

    Professor, me confirma uma coisa: ao fim da execução da main, se nao usarmos o free(), a memória permanece alocada no computador?

  • @videos12344444444
    @videos12344444444 8 ปีที่แล้ว +1

    Aqui a função free antes do printf não só desaloca a memória, como faz o printf retornar um valor totalmente aleatório.

  • @brasiltropicaltop
    @brasiltropicaltop 10 ปีที่แล้ว

    Ótimo

  • @diogomacieldacunha6324
    @diogomacieldacunha6324 3 ปีที่แล้ว

    No meu, terminal do visual studio no windows, ele dezaloca a memória e seta o ponteiro pra NULL.

  • @lucasrafael9662
    @lucasrafael9662 8 ปีที่แล้ว

    estou usando o sistema linux ubuntu, por que sera que as variaveis contem o valor 0, e o ponteiro depois de desalocado possui o valor 0

  • @chrissilva8834
    @chrissilva8834 4 ปีที่แล้ว

    show

  • @Guihgo
    @Guihgo 9 ปีที่แล้ว

    no arduino, qnd você chama free() ele seta para NULL.
    pois invés de aparecer 1000 no meu log, apareceu "" (NADA-NULL)

  • @joaovitordemelo8209
    @joaovitordemelo8209 6 ปีที่แล้ว

    CONTINUA AS AULAS :(

  • @joaolucasmenezes8482
    @joaolucasmenezes8482 9 ปีที่แล้ว

    No Ubuntu 14.04, a função "free(void*)" enche a posição desalocada com zeros.
    Compilador: gcc (Ubuntu 4.8.4-2ubuntu1~14.04) 4.8.4.
    Opções passadas ao compilador: -Wall -ansi -O2 -pedantic-errors alocacao.c -o alocacao
    ===============================================================
    /* alocacao.c */
    #include
    #include
    int main(void) {
    int* p;
    int* m;
    p = (int*)malloc(sizeof(int));
    printf("p = %p
    ", (void*)p);
    *p = 1000;
    printf("*p = %d
    ", *p);
    free(p);
    printf("p = %p
    ", (void*)p);
    m = (int*)malloc(sizeof(int));
    printf("m = %p
    ", (void*)m);
    printf("*m = %d
    ", *m);
    printf("*p = %d
    ", *p);
    return EXIT_SUCCESS;
    }
    ==============================================================
    Saída do programa no meu pc
    ==============================================================
    p = 0x1828010
    *p = 1000
    p = 0x1828010
    m = 0x1828010
    *m = 0
    *p = 0

  • @gadoenganado6386
    @gadoenganado6386 8 ปีที่แล้ว

    O Delete acima da saida de dados não deleto da mesma forma que o free();

  • @victormatheus2066
    @victormatheus2066 4 หลายเดือนก่อน

    Pessoal, esse lixo não é nada mais nada menos que o próprio endereço de memória antigo, pode ser qualquer outro tipo de valor atribuído ao ponteiro. É aleatório, só devem entender que o ponteiro não retorna ao NULL ele mantém a memória original anteriormente alocada para uso posterior. No entanto, ao chamar o malloc() novamente para o ponteiro não é garantido que ele voltará ao antigo local de memória, principalmente se ele já estiver alocado em outro ponteiro. É assim mesmo, não existe exatidão nessas paradas.

  • @diego.fernandosl
    @diego.fernandosl 9 ปีที่แล้ว

    E quando declaramos o malloc assim?
    int *p;
    p = (int*)malloc(sizeof(int)); //Resevei o espaço para alocação --> (Conversão para tipo *)malloc(sizeof(TIPO))
    p = 24; //Atribui o valor a ser alocado no espaço
    ????????????

    • @diego.fernandosl
      @diego.fernandosl 9 ปีที่แล้ว +2

      [RESOLVIDO] [Pelo menos no linux]: dá certo colocando a declaração toda do malloc junto a variável dentro do free().
      Ou seja, ao invés de "free(p);" seria "free(p = (int*)malloc(sizeof(int)));"

  • @1000grausantiago
    @1000grausantiago 6 ปีที่แล้ว

    nao há necessidade de fazer o casting ali. Aqui no Codeblocks ele imprime 1000 msm sem o casting