muistin syönti!

Hei,

C sovellukseni syö muistia enkä löydä siihen syytä! siis ohjelmani on jatkuvassa-silmukassa oleva ohjelma joka pollailee mm. hakemistoa.
pari vuorokautta päälläoltuaan koneesta loppuu muisti, missä siis voisi olla vika!? en käytä dynaamista muistin varausta eli ne missään kohtaa varaa new operaattorilla muistia mikä pitäisi vapauttaa, siksi juuri tämä ihmetyttää!
onko mahdollisesti seuraavissä käskyissä jotain joka voisi olla syypää tähän? memset, memcpy, _unlink..? pitäisikö korvata memset ja memcpy esim for-silmukalla?
6852
Äänestä

Muut lukivat myös

Vastaukset 6

Vanhimmat

memset - ei
memcpy - ei
_unlink - ei
for-silmukka - ei todellakaan!

Mitähän muuta ohjelmasi tekee? C :n kanssa pitää olla tarkkana, kun kääntäjä tekee niin paljon pyytämättäsi....

Äänestä

"joka pollailee mm. hakemistoa."

Käytät ilmeisesti Win32 FindFirstFile kutsua ?
muistitko FindClose kutsun kun olet käynyt kaikki läpi. FindFirst on "melkein" sama kuin muistin varaus. Käy lisäksi läpi kaikki API kutsut jos palauttavat Handleja jne (=> FreeHandle), ts dynaamisesti varattua muistia.

Äänestä
  • en käytä findclosea että oiskohan siinä silloin vika..!? täytyy tutkia, eli if(findfirst())
    ja kun löytyy niin findclose vai? miten sen tulisi toimia?

    Äänestä

  • ggt kirjoitti:

    en käytä findclosea että oiskohan siinä silloin vika..!? täytyy tutkia, eli if(findfirst())
    ja kun löytyy niin findclose vai? miten sen tulisi toimia?

    Kannattaa varmaankin tehdä sen if (findfirst):n sijasta mieluumin jotakuinkin näin:

    HANDLE hFind = FindFirstFile(....);

    sitten testaat:
    if (hFind != INVALID_HANDLE_VALUE)
    ...

    ja lopuksi sitten

    FindClose(hFind);

    Äänestä

  • eero kirjoitti:

    Kannattaa varmaankin tehdä sen if (findfirst):n sijasta mieluumin jotakuinkin näin:

    HANDLE hFind = FindFirstFile(....);

    sitten testaat:
    if (hFind != INVALID_HANDLE_VALUE)
    ...

    ja lopuksi sitten

    FindClose(hFind);

    Pikku tarkennus samantien: FindClose tehdään aina riippumatta saadusta handlen arvosta.

    Äänestä

  • ggt kirjoitti:

    en käytä findclosea että oiskohan siinä silloin vika..!? täytyy tutkia, eli if(findfirst())
    ja kun löytyy niin findclose vai? miten sen tulisi toimia?

    - pollaus alkaa

    if (findfirst
    {
    while ( findnext )
    }

    findclose();
    // vapauta puskurit aina riipumatta mitä tapauhtui.

    - pollaus loppuu

    Mielenkiintoista on että useimista esimerkeistä tuo puuttuu..

    Description

    findclose closes any handles and frees up any dynamic memory associated with previous calls to findfirst and findnext.

    Äänestä

Kommentoi aloitusta


ggt kirjoitti:

Hei,

C sovellukseni syö muistia enkä löydä siihen syytä! siis ohjelmani on jatkuvassa-silmukassa oleva ohjelma joka pollailee mm. hakemistoa.
pari vuorokautta päälläoltuaan koneesta loppuu muisti, missä siis voisi olla vika!? en käytä dynaamista muistin varausta eli ne missään kohtaa varaa new operaattorilla muistia mikä pitäisi vapauttaa, siksi juuri tämä ihmetyttää!
onko mahdollisesti seuraavissä käskyissä jotain joka voisi olla syypää tähän? memset, memcpy, _unlink..? pitäisikö korvata memset ja memcpy esim for-silmukalla?

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu