14
Alocação Dinâmica de Memória Algoritmos e Estrutura de Dados II DCC - UFMG

alocacao-dinamica

Embed Size (px)

DESCRIPTION

Alocação dinamica

Citation preview

  • Alo

    cao D

    inm

    ica d

    e

    Mem

    ri

    a

    Algo

    ritm

    os

    e Es

    trutu

    ra de

    D

    ado

    s II

    DCC

    -

    UFM

    G

  • Alg

    ori

    tmos

    e E

    stru

    tura

    de D

    ad

    os

    II

    Alo

    cao E

    stti

    ca x

    Din

    m

    ica

    Li

    ngu

    age

    ns

    de pr

    ogr

    am

    ao

    co

    mo

    Pa

    sca

    l, C

    e C+

    +

    perm

    item

    do

    is tip

    os

    de a

    loca

    o

    de

    m

    emr

    ia:

    Est

    tica

    e

    D

    inm

    ica

    N

    a a

    loca

    o

    e

    stt

    ica

    , o

    e

    spa

    o de

    m

    em

    ria

    pa

    ra a

    s va

    rive

    is

    rese

    rvad

    o n

    o in

    cio

    da

    e

    xecu

    o

    , n

    o

    pode

    ndo

    se

    r a

    ltera

    do de

    pois

    in

    t a; i

    nt b

    [20];

    N

    a a

    loca

    o

    di

    nm

    ica

    , o

    e

    spa

    o de

    m

    emr

    ia pa

    ra

    as

    vari

    veis

    po

    de se

    r a

    loca

    do di

    na

    mic

    ame

    nte

    dura

    nte

    a

    e

    xecu

    o

    do

    pr

    ogr

    ama

  • Alg

    ori

    tmos

    e E

    stru

    tura

    de D

    ad

    os

    II

    Alo

    cao D

    inm

    ica

    A

    mem

    ria

    al

    oca

    da di

    nam

    icam

    ente

    ace

    ssad

    a atra

    vs

    de A

    pon

    tado

    res

    (poin

    ters

    ) qu

    e na ve

    rdad

    e s

    o va

    rive

    is qu

    e ar

    maze

    nam

    o ende

    reo

    de

    um

    a r

    ea de

    m

    em

    ria

    A

    mem

    ria

    al

    oca

    da di

    nam

    icam

    ente

    fa

    z pa

    rte

    de um

    a r

    ea de

    m

    em

    ria

    ch

    am

    ada

    he

    ap

    Basi

    cam

    ente

    , o

    pr

    ogr

    am

    a a

    loca

    e

    de

    salo

    ca

    por

    es

    de m

    emr

    ia do

    he

    ap

    dura

    nte

    a

    e

    xecu

    o

  • Alg

    ori

    tmos

    e E

    stru

    tura

    de D

    ad

    os

    II

    Alo

    cao D

    inm

    ica

    a

    Hea

    pM

    emr

    ia Es

    ttic

    a

    100x214

    0x218

    0x222

    0x226

    0x230

    0x234

    0x238

    0x242

    0x246

    a

    um

    in

    tb

    u

    m ap

    on

    tado

    r pa

    ra u

    m in

    t

    b0x

    234

    10

    0x016

    0x020

  • Alg

    ori

    tmos

    e E

    stru

    tura

    de D

    ad

    os

    II

    Ap

    on

    tad

    ore

    s

    Nota

    o e

    m C

    de

    fini

    o de

    p

    com

    o um

    ap

    onta

    dor

    para

    um

    a va

    rive

    l do tip

    o T

    T

    *p;

    Al

    oca

    o de

    m

    em

    ria

    pa

    ra um

    a va

    rive

    l apo

    nta

    da po

    r p

    p

    = (T

    *) m

    allo

    c(siz

    eof(T

    ));

    Desa

    loca

    o

    de m

    em

    ria

    fre

    e(p)

    ;

    Conte

    udo

    da

    va

    rive

    l apo

    nta

    da po

    r P

    *p;

    Va

    lor

    nulo

    pa

    ra um

    apo

    nta

    dor

    null;

    En

    dere

    o de

    um

    a va

    rive

    l a

    &a;

  • Alg

    ori

    tmos

    e E

    stru

    tura

    de D

    ad

    os

    II

    Alo

    cao D

    inm

    ica

    int *

    a,*c,

    b;... b =

    10

    ;a =

    (in

    t *) m

    allo

    c(siz

    eof(in

    t));

    c =

    a;

    *a =

    20

    ;fre

    e(a)

    a =

    &b

    ;*a =

    30

    ; //

    qual o

    va

    lor

    de b?

    a

    20

    b

    Hea

    pM

    emr

    ia

    Est

    tica

    10

    X

    30

    Mem

    ria

    n

    o fo

    i de

    salo

    cada

    . O

    esp

    ao

    co

    ntin

    ua

    ocu

    padoc

  • Alg

    ori

    tmos

    e E

    stru

    tura

    de D

    ad

    os

    II

    Err

    os

    Co

    mu

    ns

    Es

    quec

    er de

    al

    oca

    r m

    emr

    ia e

    ten

    tar

    aces

    sar

    o co

    nte

    do

    da

    var

    ivel

    Co

    piar

    o va

    lor

    do apo

    nta

    dor

    ao in

    vs

    do va

    lor

    da va

    rive

    l apo

    nta

    da

    Esqu

    ece

    r de

    de

    salo

    car

    mem

    ria

    El

    a

    desa

    loca

    da a

    o fim

    do

    pr

    ogr

    ama

    o

    u

    pro

    cedi

    men

    to fu

    n

    o o

    nde

    a

    va

    rive

    l est

    de

    cla

    rada

    , m

    as

    pode

    se

    r u

    m pr

    obl

    em

    a e

    m lo

    ops

    Te

    nta

    r ace

    ssar

    o co

    nte

    do da

    va

    rive

    l depo

    is

    de de

    salo

    c-la

  • Alg

    ori

    tmos

    e E

    stru

    tura

    de D

    ad

    os

    II

    Exerc

    cio

    : O

    qu

    e v

    ai

    ser

    imp

    ress

    o?

    double a;

    double *p, *q;

    a = 3.14;

    printf("%f\n", a);

    p = &a;

    *p = 2.718;

    printf("%f\n", a);

    a = 5;

    printf("%f\n", *p);

    p = NULL;

    p = (double *)malloc(sizeof(double));

    *p = 20;

    q = p;

    printf("%f\n", *p);

    printf("%f\n", a);

    free(p);

    printf("%f\n", *q);

  • Alg

    ori

    tmos

    e E

    stru

    tura

    de D

    ad

    os

    II

    Perg

    un

    ta q

    ue n

    o q

    uer

    cala

    r...

    int *

    an

    o

    a de

    clara

    o de

    um

    ve

    tor

    de in

    t?

    Em

    C,

    to

    do ve

    tor

    um

    apo

    nta

    dor.

    Po

    rtanto

    po

    de-se

    fa

    zer

    cois

    as

    com

    o:

    int a[10], *b;

    b = a;

    b[5] = 100;

    Printf(%d\n, a[5]);

    Printf(%d\n, b[5]);

    int a[10], *b;

    b = (int *) malloc(10*sizeof(int));

    b[5] = 100;

    printf(%d\n, a[5]);

    Printf(%d\n, b[5]);

    100

    100

    4265

    710

    0O

    bs. N

    o se

    po

    de fa

    zer

    a =

    b

    no exe

    mpl

    o aci

    ma

  • Alg

    ori

    tmos

    e E

    stru

    tura

    de D

    ad

    os

    II

    Ap

    on

    tad

    ore

    s p

    ara

    Tip

    os

    Est

    rutu

    rad

    os

    Ap

    onta

    dore

    s s

    o norm

    alm

    ente

    util

    izado

    s co

    m tip

    os

    est

    rutu

    rado

    s

    Typedef struct {

    int idade;

    double salario;

    } TRegistro

    TRegistro *a;

    ...

    a = (TRegistro *) malloc(sizeof(TRegistro))

    a->idade = 30;

    a->salario = 80;

  • Alg

    ori

    tmos

    e E

    stru

    tura

    de D

    ad

    os

    II

    Pass

    ag

    em

    de P

    ar

    metr

    os

    Em

    pa

    scal

    e

    C+

    +, pa

    rm

    etro

    s pa

    ra fu

    n

    o po

    dem

    ser

    pass

    ado

    s po

    r va

    lor

    ou

    po

    r re

    fer

    nci

    a

    Po

    r v

    alo

    r:o

    pa

    rm

    etro

    fo

    rma

    l (re

    cebi

    do n

    o pr

    oce

    dim

    en

    to)

    u

    ma

    cpi

    ado

    pa

    rm

    etro

    re

    al (p

    ass

    ado

    n

    a ch

    am

    ada

    )

    Por

    refe

    rn

    cia:

    o pa

    rm

    etro

    fo

    rma

    l (re

    cebi

    do n

    o

    pro

    cedi

    me

    nto

    ) u

    ma

    refe

    rn

    cia

    para

    o

    pa

    rm

    etro

    re

    al

    (pass

    ado

    n

    a ch

    am

    ada

    )

    As m

    odi

    fica

    es

    efe

    tuada

    s ac

    onte

    cem

    no pa

    rm

    etro

    re

    al

    Em

    C

    s ex

    iste

    pa

    ssa

    gem

    po

    r va

    lor,

    lo

    go de

    ve-se

    impl

    eme

    nta

    r a

    pa

    ssag

    em

    po

    r re

    fer

    nci

    a u

    tiliz

    an

    do-

    se a

    pon

    tado

    res

  • Alg

    ori

    tmos

    e E

    stru

    tura

    de D

    ad

    os

    II

    Pass

    ag

    em

    de P

    ar

    metr

    os

    (C)

    void SomaUm(int x, int *y)

    { x = x + 1;

    *y = (*y) + 1;

    printf("Funcao SomaUm: %d %d\n", x, *y);

    } int main()

    { int a=0, b=0;

    int *c;

    c = &b;

    SomaUm(a, c);

    printf("Programa principal: %d %d\n", a, b);

    }

    1 1

    0 1

  • Alg

    ori

    tmos

    e E

    stru

    tura

    de D

    ad

    os

    II

    Pass

    ag

    em

    de P

    ar

    metr

    os

    E

    para

    a

    loca

    r m

    em

    ria

    de

    ntro

    de

    u

    m pr

    oce

    dim

    en

    to?

    Em

    pa

    sca

    l, ba

    sta

    pa

    ssa

    r a

    va

    rive

    l (apo

    nta

    dor)

    com

    o

    refe

    rn

    cia

    .

    Em

    C

    tam

    bm

    , m

    as

    com

    o n

    o h

    pa

    ssa

    gem

    po

    r re

    fer

    nci

    a

    as

    cois

    as

    so

    u

    m po

    uco

    m

    ais

    co

    mpl

    ica

    das

    void

    alo

    ca(i

    nt *x, in

    t n)

    { x=(i

    nt *)m

    all

    oc(n

    *siz

    eof(

    int))

    ;x[0

    ] = 20

    ;} in

    t main

    ()

    { in

    t *a;

    alo

    ca(a

    , 10

    );

    a[1

    ] = 40

    ;}

    Erro

    r!Ac

    cess

    Vi

    ola

    tion

    !

    void

    alo

    ca(i

    nt **x, in

    t n)

    { *x=(i

    nt *)m

    all

    oc(n

    *siz

    eof(

    int))

    ;if

    (*

    x == NULL)

    prin

    tf(

    ERROR!!!!\n

    );

    els

    e

    *x[0

    ] = 20

    ;} in

    t main

    ()

    { in

    t *a, **b;

    b = &a;

    alo

    ca(b

    , 10

    );

    a[1

    ] = 40

    ;}

    OK

  • Alg

    ori

    tmos

    e E

    stru

    tura

    de D

    ad

    os

    II

    Exerc

    cio

    s

    1.Fa

    a um

    pr

    ogr

    am

    a qu

    e le

    ia um

    va

    lor

    n,cr

    ie

    dinam

    icam

    ente

    um

    ve

    tor

    de n ele

    mento

    s e

    pass

    e ess

    e ve

    tor

    para

    um

    a fu

    n

    o qu

    e va

    i le

    r os

    ele

    mento

    s de

    sse ve

    tor.

    2.D

    ecla

    re um

    Ti

    poR

    egis

    tro, co

    m ca

    mpo

    s a

    inte

    iro e b

    que

    um

    apo

    nta

    dor

    para

    ch

    ar.

    No se

    u pr

    ogr

    am

    a cr

    ie di

    nam

    icam

    ente

    um

    a

    vria

    vel d

    o Ti

    poR

    egi

    stro

    e atri

    bua os

    valo

    res

    10 e x

    aos

    se

    us

    cam

    pos.