Nooob kysymys muistinvapautuksesta

nyyyyyppäkoodari

Hjälp!
Elikkäs semmoista että kun olen yritän vapauttaa dynaamisesti varattua muistia niin muuttujan sisältö ei vapaudu. Onko ok? Koodi:

#include
#include
#include

int Vaihda(char** pnLuku1);
void Vapauta(char* pnLuku1);

int main(int argc, char* argv[])
{
char* nLuku1 = "foo";
printf("Luvut ennen vaihtamista: \n");
printf("Luku1 = %s\n", nLuku1);

Vaihda(&nLuku1);
printf("Luvut vaihtamisen jälkeen: \n");
printf("Luku1 = %s\n", nLuku1);

Vapauta(nLuku1);
printf("Luvut vapauttamisen jälkeen: \n");
printf("Luku1 = %s\n", nLuku1);

nLuku1 = NULL;
printf("Luvut nullaamisen jälkeen: \n");
printf("Luku1 = %s\n", nLuku1);

sleep(10);

return 0;
}

int Vaihda(char** pnLuku1)
{
char* testi = "testistr";

*pnLuku1 = malloc((strlen(testi 1))* sizeof(char));
strcpy((char*)(*pnLuku1), testi);

return 0;
}

void Vapauta(char* pnLuku1)
{
printf("Vapautetaan... \n");
free(pnLuku1);
}

Tulostaa:
Luvut ennen vaihtamista:
Luku1 = foo
Luvut vaihtamisen jälkeen:
Luku1 = testistr
Vapautetaan...
Luvut vapauttamisen jälkeen:
Luku1 = testistr
Luvut nullaamisen jälkeen:
Luku1 = (null)

Ajoin Leaksilla ja se ei ainakaan havainnut muistivuotoa, mutta miksi luku1 tulostuu vielä vapautuksen jälkeen? Mikä tässä nyt kusee?

46

190

    Vastaukset

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • cccccccp

      Kyllä free vapauttaa muistin, mutta free ei nullaa pointeria. Niin se näyttää tässä tapauksessa vielä samaa, kun mikään muukaan prosessi ei ole muuttanut ko muistia.
      Jos muistia tutkii/käyttää vapautuksen jälkeen, sen sisältö voi olla mitä hyvänsä ja siitä voi seurata epämääräisesti esiintyviä virheitä.

    • sfsf3wf32f3f

      Monesti käytetään seuraava funktio pohjaa muistinvapautusten suorittamiseen:

      my_free(void *ptr) {
          if(ptr) free(ptr);
          ptr = NULL;
      }

      Tämä menettely varmistaa että ei vapauteta jo vapautettua muistia. Lisäksi se asettaa pointterin arvoksi NULL jolla varmistetaan edelleen mahdollisten ongelmien kertyminen ja mahdolliset varaamattoman alueen käytöt huomataan nopeammin.

      • simply the best

        Mieluummin:

        #define my_free(ptr) {free(ptr);ptr=NULL;}

        muuten ajatuksesi ei toimi.


      • NULLausRiittaa
        simply the best kirjoitti:

        Mieluummin:

        #define my_free(ptr) {free(ptr);ptr=NULL;}

        muuten ajatuksesi ei toimi.

        Ei tartte vapauttaa, jos asetetaan osoittamaan tietokoneen nollaan!


      • TietokoneenAsialla
        NULLausRiittaa kirjoitti:

        Ei tartte vapauttaa, jos asetetaan osoittamaan tietokoneen nollaan!

        Tietokoneen nolla on todennäköisesti eri asia kuin ihmisen nolla!


      • pröööts
        NULLausRiittaa kirjoitti:

        Ei tartte vapauttaa, jos asetetaan osoittamaan tietokoneen nollaan!

        Höpöhöpö. Mene kotiin syömään puuroa.


      • sdfsdfsdfd
        simply the best kirjoitti:

        Mieluummin:

        #define my_free(ptr) {free(ptr);ptr=NULL;}

        muuten ajatuksesi ei toimi.

        Sama asia. Kääntäjä kuitenkin inlainaa pienet funktiot pääsääntöisesti. Kirjoittamalla vapautuksen funktion muotoon mahdollistetaan parempi kääntäjäoptimointi.


      • pröööts
        sdfsdfsdfd kirjoitti:

        Sama asia. Kääntäjä kuitenkin inlainaa pienet funktiot pääsääntöisesti. Kirjoittamalla vapautuksen funktion muotoon mahdollistetaan parempi kääntäjäoptimointi.

        Höpöhöpö. Et siis ymmärrä makron ja funktion eroa. Eikä tässä puhuta C ohjelmasta.


      • TietokoneAsiaa
        pröööts kirjoitti:

        Höpöhöpö. Mene kotiin syömään puuroa.

        Toi Jamppo ei oo koskaan ohjelmoinnu: kaikki ketä on joskus ohjelmoinnu nollaaki, tietää, et NULL on keksitty erilaisia tietokoneita varte, että ne äkkäis, et jossain toisenlaises tietokonees nolla onkin erilainen kuin siinä ja siks tarttee NULL: ia, et vois joustavast siirtää sorsat ja kaikki tietokoneesta toisenlaiseen ilman, että tarttee siä alkaa millää sripktil selittään, et täs ois niinkö nolla, jos siin on nolla, ku riittää, et sanoo joka konees, et siin on NULL ja ne ymmärtää heti, mist siin on kysymys: nollasta, joka on ihmisellä eri asia kuin tietokoneilla!


      • sfsdffsdfsdfsdf
        pröööts kirjoitti:

        Höpöhöpö. Et siis ymmärrä makron ja funktion eroa. Eikä tässä puhuta C ohjelmasta.

        Et taida itse ymmärtää.


      • sfsf34233fsfsf
        sfsdffsdfsdfsdf kirjoitti:

        Et taida itse ymmärtää.

        Jos nyt tarkoitat sitä että funktion argumenttina oleva tyyppi on eri kuin esim. sille heitettävä pointteri niin luonnollisesti kirjoitetaan se funktio hyväksymään sitä oikeaa tyyppiä.

        Voihan tuon aivan hyvin makrollakin hoitaa mutta funktiota käytetään yleisemmin juurikin tuon kääntäjäoptimoinnin takia.


      • pröööts
        sfsf34233fsfsf kirjoitti:

        Jos nyt tarkoitat sitä että funktion argumenttina oleva tyyppi on eri kuin esim. sille heitettävä pointteri niin luonnollisesti kirjoitetaan se funktio hyväksymään sitä oikeaa tyyppiä.

        Voihan tuon aivan hyvin makrollakin hoitaa mutta funktiota käytetään yleisemmin juurikin tuon kääntäjäoptimoinnin takia.

        Meneppäs C-kielen alkeiskurssille, Sitten muutamalle jatkokurssille. Tule sitten takaisin tänne pyytämään anteeksi tietämättömyyttäsi.


      • eqweqweqwew
        sdfsdfsdfd kirjoitti:

        Sama asia. Kääntäjä kuitenkin inlainaa pienet funktiot pääsääntöisesti. Kirjoittamalla vapautuksen funktion muotoon mahdollistetaan parempi kääntäjäoptimointi.

        Sen verran häiritsee tämä disinformaatio, että pakko korjata. Olkoon koodi

        inline my_free(void *ptr) {
        if(ptr) free(ptr);
        ptr = NULL;
        }

        int main(void) {
        int *jep = malloc(100);
        my_free(jep);
        printf("%d", (int)jep);
        }

        Nyt siis my_free on inline-funktio, mutta mikä arvo tulostuu? Vastaus - ei ainakaan nolla. Vaikka funktio on inline, muuttuja ptr on silti lokaali muuttuja ja jep ei nollaudu.

        Sen sijaan tällaisessa voisi olla jotain järjen hiven:

        inline my_free(void **ptr) {
        if(*ptr) free(*ptr);
        *ptr = NULL;
        }

        Makro on vielä parempi. Mutta vielä parempi on C :n auto_ptr.


      • ewr3wr32r23
        eqweqweqwew kirjoitti:

        Sen verran häiritsee tämä disinformaatio, että pakko korjata. Olkoon koodi

        inline my_free(void *ptr) {
        if(ptr) free(ptr);
        ptr = NULL;
        }

        int main(void) {
        int *jep = malloc(100);
        my_free(jep);
        printf("%d", (int)jep);
        }

        Nyt siis my_free on inline-funktio, mutta mikä arvo tulostuu? Vastaus - ei ainakaan nolla. Vaikka funktio on inline, muuttuja ptr on silti lokaali muuttuja ja jep ei nollaudu.

        Sen sijaan tällaisessa voisi olla jotain järjen hiven:

        inline my_free(void **ptr) {
        if(*ptr) free(*ptr);
        *ptr = NULL;
        }

        Makro on vielä parempi. Mutta vielä parempi on C :n auto_ptr.

        Inline kannattaa jättää pois ja antaa kääntäjän päättä optimoinneista.
        Jos vapautusta kutsutaan useasti niin ei ole mitään järkeä kirjoittaa sitä makroksi.

        C taas aivovammainen kieli aivovaimmaisine standardikirjastoinene joten sen voi jättää kokonaan laskuista.


      • sdfsdfsdf543534
        pröööts kirjoitti:

        Meneppäs C-kielen alkeiskurssille, Sitten muutamalle jatkokurssille. Tule sitten takaisin tänne pyytämään anteeksi tietämättömyyttäsi.

        vittu noiden kurssien kanssa.. Opetetaan aivan päin persettä kaikki.

        Aloitetaan yleensä "void main(void)".

        rage.


      • koodimaster
        ewr3wr32r23 kirjoitti:

        Inline kannattaa jättää pois ja antaa kääntäjän päättä optimoinneista.
        Jos vapautusta kutsutaan useasti niin ei ole mitään järkeä kirjoittaa sitä makroksi.

        C taas aivovammainen kieli aivovaimmaisine standardikirjastoinene joten sen voi jättää kokonaan laskuista.

        Olet kyllä oikeassa, c :n suhteen. Qbasic on jopa parempi.
        Mutta kun me harrastelijatkin halutaan vähän käyttää älynystyröitä, niin c on
        kivaa ajanvietettä.


      • fijijf
        sdfsdfsdf543534 kirjoitti:

        vittu noiden kurssien kanssa.. Opetetaan aivan päin persettä kaikki.

        Aloitetaan yleensä "void main(void)".

        rage.

        "Opetetaan aivan päin persettä kaikki."

        Sitähän sinä et voi tietää.
        Meeppäs vaan nyt sinne kurssille niin ehkä opitkin jotain.


      • moi____
        sfsf34233fsfsf kirjoitti:

        Jos nyt tarkoitat sitä että funktion argumenttina oleva tyyppi on eri kuin esim. sille heitettävä pointteri niin luonnollisesti kirjoitetaan se funktio hyväksymään sitä oikeaa tyyppiä.

        Voihan tuon aivan hyvin makrollakin hoitaa mutta funktiota käytetään yleisemmin juurikin tuon kääntäjäoptimoinnin takia.

        En oikeastaan osaa C:tä, mut yritetään. Korjatkaa jos olen väärässä. C:ssä välitetään arvot funktioille, eikä niiden referenssejä. Eli funktiokutsua varten muuttujista tehdään paikalliset kopiot. Hän käyttää makroa, koska ne laajennetaan esikääntäjän toimesta, funktiokutsua ei tehdä ja siis muuttujaakin pystyy roppaamaan suoraan. Tai sit funktiolle täytyis laittaa osoitinmuuttujan osoite? Ei yhtäkään C-kurssia, ja luulen että sain ton oikein. \o/ Ketä kiinnostaa in-lainaako kääntäjä jotain? Menee enemmän käshee.


      • 23rfwevff23f23f32
        fijijf kirjoitti:

        "Opetetaan aivan päin persettä kaikki."

        Sitähän sinä et voi tietää.
        Meeppäs vaan nyt sinne kurssille niin ehkä opitkin jotain.

        No eipä ole tullut vielä yhtään kurssia vastaan jossa "opettaja" osaisi paremmin C:tä kuin minä.


      • fw34r2fwfwf3w2r23ff
        moi____ kirjoitti:

        En oikeastaan osaa C:tä, mut yritetään. Korjatkaa jos olen väärässä. C:ssä välitetään arvot funktioille, eikä niiden referenssejä. Eli funktiokutsua varten muuttujista tehdään paikalliset kopiot. Hän käyttää makroa, koska ne laajennetaan esikääntäjän toimesta, funktiokutsua ei tehdä ja siis muuttujaakin pystyy roppaamaan suoraan. Tai sit funktiolle täytyis laittaa osoitinmuuttujan osoite? Ei yhtäkään C-kurssia, ja luulen että sain ton oikein. \o/ Ketä kiinnostaa in-lainaako kääntäjä jotain? Menee enemmän käshee.

        Niin juurikin näin.

        Toinen vaihtoehto on passata funktiolle osoittimen pointteri ja hoitaa sitten asi funkiton sisällä. Tämä mahdollistaa paremman kääntäjänoptimoinnin.

        Itse suosin yleensä sitä vaihtoehtoa joka näyttää selkeimmältä ja auttaa kääntäjää tekemään hommansa kunnolla. Tämä on hieman rajatapaus.


      • öasjhgkad
        23rfwevff23f23f32 kirjoitti:

        No eipä ole tullut vielä yhtään kurssia vastaan jossa "opettaja" osaisi paremmin C:tä kuin minä.

        Et siis ymmärtänyt kurssista mitään.


      • 3fesfwefefe
        öasjhgkad kirjoitti:

        Et siis ymmärtänyt kurssista mitään.

        Etkö parempaa keksinyt. ad hominem abusivum ja sitä rataa.

        Mutta joo jos olet koskaan edes näitä yleisiä kursseja oikeasti katsellut niin ne ovat pääosin täyttä sontaa.


      • mb,amnfbasdf
        3fesfwefefe kirjoitti:

        Etkö parempaa keksinyt. ad hominem abusivum ja sitä rataa.

        Mutta joo jos olet koskaan edes näitä yleisiä kursseja oikeasti katsellut niin ne ovat pääosin täyttä sontaa.

        Tähän asti kaikki C/C kielestä lausumasi osoittaa ettet ymmärrä asiasta mitään. Siksi sinun on ihan turha arvostella esim. niitä kursseja.


      • 234234fsef32
        mb,amnfbasdf kirjoitti:

        Tähän asti kaikki C/C kielestä lausumasi osoittaa ettet ymmärrä asiasta mitään. Siksi sinun on ihan turha arvostella esim. niitä kursseja.

        Koska 90% kursseista on täyttä paska jossa opetetaan kaikki vastoin standardeja.

        Kannattaisi varmaan lukea C:n standardi whitepaperit ettei tarvi täällä länkyttää turhanpäiväisesti.


      • fdgrdg3w4tg4t4
        mb,amnfbasdf kirjoitti:

        Tähän asti kaikki C/C kielestä lausumasi osoittaa ettet ymmärrä asiasta mitään. Siksi sinun on ihan turha arvostella esim. niitä kursseja.

        Ilmeiseti tähän alalankaan on vastannut monta eri henkilöä ja sekoitat nyt jonkun muun toiseen.

        ps. Kurssit todella ovat suurimmaksi osaksi huonolaatuisia.


      • biucbiuwqhbcq
        fdgrdg3w4tg4t4 kirjoitti:

        Ilmeiseti tähän alalankaan on vastannut monta eri henkilöä ja sekoitat nyt jonkun muun toiseen.

        ps. Kurssit todella ovat suurimmaksi osaksi huonolaatuisia.

        Kuinka monen kurssin kokemuksella arvioit valtaosan niistä huonolaatuisiksi?


      • 23423r fewfww
        biucbiuwqhbcq kirjoitti:

        Kuinka monen kurssin kokemuksella arvioit valtaosan niistä huonolaatuisiksi?

        Useamman koulukurssin (AMK ja Ammattikoulu) muutaman erillisen alkeis ja jatkokurssin.

        void main ja sitä rataa.


      • wqeqweqweqw
        23423r fewfww kirjoitti:

        Useamman koulukurssin (AMK ja Ammattikoulu) muutaman erillisen alkeis ja jatkokurssin.

        void main ja sitä rataa.

        Jep, ammattikoulukurssit (AK and AMK) ovat kyllä keskimäärin syvältä. Helmiä kyllä löytyy, mutta yleisesti ottaen parempi kurssitarjonta on yliopistoissa, joita löytyy myöskin Suomesta pilvin pimein.


      • wqeqweqweqw
        wqeqweqweqw kirjoitti:

        Jep, ammattikoulukurssit (AK and AMK) ovat kyllä keskimäärin syvältä. Helmiä kyllä löytyy, mutta yleisesti ottaen parempi kurssitarjonta on yliopistoissa, joita löytyy myöskin Suomesta pilvin pimein.

        Niin, ja entisenä C-opettajan kommentoisin, että "void main" on huonoa ohjelmointityyliä. Se on "int main".


      • dsf3wr32r3r3r32
        wqeqweqweqw kirjoitti:

        Niin, ja entisenä C-opettajan kommentoisin, että "void main" on huonoa ohjelmointityyliä. Se on "int main".

        Niin juurikin. Ja "wanahat parrat" opettaa vielä näillä paljon parjatuilla C kursseilla nimenomaan "void main()" eikä standardinmukaista versiosta.

        Lisäksi edelleen törmää usein johonkin kivikautiseen Borlandin C builderiin jota noilla kursseilla käytetään.

        Joskus tehdään myös jollain sairaalla C/C kombinaatiolla asiat kun kurssin vetäjä ei osaa kumpaakaan kieltä kunnolla vaan vähän molempia :D


      • C-poliisi
        wqeqweqweqw kirjoitti:

        Niin, ja entisenä C-opettajan kommentoisin, että "void main" on huonoa ohjelmointityyliä. Se on "int main".

        Se ei ole huonoa tyyliä vaan yksiselitteisesti väärin.

        http://c-faq.com/ansi/voidmain.html
        http://c-faq.com/ansi/maindecl.html

        Siis C-ohjelman käynnistyskoodi odottaa main-funktiolta palautuksena int-arvoa.
        (Tietysti kääntäjä lisää ohjelmaan automaattisesti tuon käynnistyskoodin)


      • 42423rerfwf3qf3qfq
        C-poliisi kirjoitti:

        Se ei ole huonoa tyyliä vaan yksiselitteisesti väärin.

        http://c-faq.com/ansi/voidmain.html
        http://c-faq.com/ansi/maindecl.html

        Siis C-ohjelman käynnistyskoodi odottaa main-funktiolta palautuksena int-arvoa.
        (Tietysti kääntäjä lisää ohjelmaan automaattisesti tuon käynnistyskoodin)

        Joo sehän on siis täysin standardinvastainen menettely.

        Sulautetussa ympräristössä salittakkoon alustan sallimien rajojen puitteissa. Sulautetussa ei voi muutenkaan aina seurata kaikkia standardeja sata prosenttisesti.


    • 9

      C fanipojat käyneet pistämässä thumbs downia oikein urakalla. :D

      Siitä ei kyllä pääse yli eikä ympäri että C standarikirjast on uskomattoman huonosti suunniteltu.

      • pröööts

        Kun kerran ilmoitat olevasi tuollainen asiantuntija, niin kerrohan yksityiskohtaisesti ja perustellen mikä siinä niin huonoa on?
        Sitten kerro yksityiskohtaisesti miten itse olisit suunnitellut paremman.

        Mutta koska et asiasta mitään tiedä, niin varmasti et pysty vastaamaan edes omaan huutoosi.


      • sdfsfs32fgw3g4g
        pröööts kirjoitti:

        Kun kerran ilmoitat olevasi tuollainen asiantuntija, niin kerrohan yksityiskohtaisesti ja perustellen mikä siinä niin huonoa on?
        Sitten kerro yksityiskohtaisesti miten itse olisit suunnitellut paremman.

        Mutta koska et asiasta mitään tiedä, niin varmasti et pysty vastaamaan edes omaan huutoosi.

        Esimerkiksi pahamainen file io joka on aivan vitun turha verrattuna C:n yksinkertaiseen ja tehokkaaseen tiedostojenkäsittelyyn.

        Käytänössä C ifstream on huonosti suunniteltu luokkamöhkäle joka sisältää kaikki samat funktiot kuin C:n yksinkertainen malli. Tiedoston lataaminen muistiin ifstreamilla on vittumaista purkkaa ja tiedoston koon selvittäminenkin tapahtuu juuri samalla tavalla kuin C:ssä. Mikä on siis if/ofstreamien pointti.

        Koko standardirjasto on täynnä tälläistä purkkaa ja monesti saman asian voi tehdä yli 9000 eri tavalla. C:ssä hyviä tapoja on vain yksi. C standardikirjastoa pitäsi yksinkertaistaa.


      • pröööts
        sdfsfs32fgw3g4g kirjoitti:

        Esimerkiksi pahamainen file io joka on aivan vitun turha verrattuna C:n yksinkertaiseen ja tehokkaaseen tiedostojenkäsittelyyn.

        Käytänössä C ifstream on huonosti suunniteltu luokkamöhkäle joka sisältää kaikki samat funktiot kuin C:n yksinkertainen malli. Tiedoston lataaminen muistiin ifstreamilla on vittumaista purkkaa ja tiedoston koon selvittäminenkin tapahtuu juuri samalla tavalla kuin C:ssä. Mikä on siis if/ofstreamien pointti.

        Koko standardirjasto on täynnä tälläistä purkkaa ja monesti saman asian voi tehdä yli 9000 eri tavalla. C:ssä hyviä tapoja on vain yksi. C standardikirjastoa pitäsi yksinkertaistaa.

        STL on varsin hyvin suunniteltu kokonaisuus, ja se on erityisesti tarkoitettu isojen ohjelmistojen tekoon eikä mihinkään "helloworldiin". Hyvä ohjelmoija käyttää tarkoituksiinsa parhaiten sopivia (luokka)kirjastoja, mutta osaamaton pelle ei ymmärrä suurista kokonaisuuksista mitään ja tietenkin turhautuu.


      • 18
        pröööts kirjoitti:

        STL on varsin hyvin suunniteltu kokonaisuus, ja se on erityisesti tarkoitettu isojen ohjelmistojen tekoon eikä mihinkään "helloworldiin". Hyvä ohjelmoija käyttää tarkoituksiinsa parhaiten sopivia (luokka)kirjastoja, mutta osaamaton pelle ei ymmärrä suurista kokonaisuuksista mitään ja tietenkin turhautuu.

        Tässä muutamia pointteja miksi STL on myöskin hieman päin vittua suunniteltu alusta alkaen:

        http://www.cherea.de/usability/stlbad.html
        http://www.ski-epic.com/templates_stl_rant/index.html


        Mutta joo.. Minusta C standarikirjasto ei rohkaise yksinkertaiseen ja selkeään ratkaisuun koska sieltä löytyy kaikenlaista nippelia ja nappelia liikaa. C on vaikea opetella juurikin tuon levahtaneen standardikirjaston takia.

        Tietysti hyvä koodaaja valitseet työkalut tehtävän mukaan mutta onko siitä pakko tehdä tarpeettoman monimutkaista ja vaikeasti opeteltavaa.

        Onneksi on D on nousussa ja Vala vahvasti kehityksen alla. Saadaa vihdoin se kunnon hyödyllinen harppaus C:stä eteenpäin.

        Heitetäänpä tähän vielä Linus Torvaldsin kieli poskessa heittämä kommentti C :sta:

        "C is in that inconvenient spot where it doesn't help make things simple enough to be truly usable for prototyping or simple GUI programming, and yet isn't the lean system programming language that C is that actively encourages you to use simple and direct constructs."

        Pakko tässä kohdin yhtyä herran mielipiteeseen.


      • dx
        18 kirjoitti:

        Tässä muutamia pointteja miksi STL on myöskin hieman päin vittua suunniteltu alusta alkaen:

        http://www.cherea.de/usability/stlbad.html
        http://www.ski-epic.com/templates_stl_rant/index.html


        Mutta joo.. Minusta C standarikirjasto ei rohkaise yksinkertaiseen ja selkeään ratkaisuun koska sieltä löytyy kaikenlaista nippelia ja nappelia liikaa. C on vaikea opetella juurikin tuon levahtaneen standardikirjaston takia.

        Tietysti hyvä koodaaja valitseet työkalut tehtävän mukaan mutta onko siitä pakko tehdä tarpeettoman monimutkaista ja vaikeasti opeteltavaa.

        Onneksi on D on nousussa ja Vala vahvasti kehityksen alla. Saadaa vihdoin se kunnon hyödyllinen harppaus C:stä eteenpäin.

        Heitetäänpä tähän vielä Linus Torvaldsin kieli poskessa heittämä kommentti C :sta:

        "C is in that inconvenient spot where it doesn't help make things simple enough to be truly usable for prototyping or simple GUI programming, and yet isn't the lean system programming language that C is that actively encourages you to use simple and direct constructs."

        Pakko tässä kohdin yhtyä herran mielipiteeseen.

        SLT on hemmetin vaikea käyttää, mikä oikeastaan on se syy mikä tekee siitä huonon. Tunnustan käyttäneeni STL:ää aika-ajoin ja periaatteessa se on kunnon nörtin taivas - sehän toteuttaa geneerisen ohjelmoinnin työkalut ihan oikeasti ja niin, että koodista tulee oikeasti tehokasta. Juuri tehokkuussyistä olen sitä välillä käyttänyt (ja välttääkseni dynaamisen muistinvarauksen kirot). Mutta ehkä on ollut huono idea toteuttaa tällainen kirjasto C :n päälle, mikä ei ihan ole yhteensopiva tällaisen toteuttamiseen syntaksiltaan.

        Tunnustan myös käyttäväni I/O-toiminnallisuuksiin C:n stdio:ta C :n streamien sijaan, koska pelkkä formatoitu tulostus on tehty niin hemmetin vaikeaksi perus printf:iin verrattuna.

        C sen sijaan vähän tavallisimmilta olio-ominaisuuksiltaan on ihan hyvä C:n jatke. Sillä voi tehdä puhtaasti pass-by-value-tyyppistä koodia ja silti käyttää olioita, minkä vastaavan toteuttaminen vaatisi C:ssä pointteita ja dynaamista muistin varausta. Ne taas ovat synti jos tehdään koodia vaikka sulautettuun järjestelmään minkä pitää toimia ihan oikeasti (todistetusti).


      • Jepajee3423424
        dx kirjoitti:

        SLT on hemmetin vaikea käyttää, mikä oikeastaan on se syy mikä tekee siitä huonon. Tunnustan käyttäneeni STL:ää aika-ajoin ja periaatteessa se on kunnon nörtin taivas - sehän toteuttaa geneerisen ohjelmoinnin työkalut ihan oikeasti ja niin, että koodista tulee oikeasti tehokasta. Juuri tehokkuussyistä olen sitä välillä käyttänyt (ja välttääkseni dynaamisen muistinvarauksen kirot). Mutta ehkä on ollut huono idea toteuttaa tällainen kirjasto C :n päälle, mikä ei ihan ole yhteensopiva tällaisen toteuttamiseen syntaksiltaan.

        Tunnustan myös käyttäväni I/O-toiminnallisuuksiin C:n stdio:ta C :n streamien sijaan, koska pelkkä formatoitu tulostus on tehty niin hemmetin vaikeaksi perus printf:iin verrattuna.

        C sen sijaan vähän tavallisimmilta olio-ominaisuuksiltaan on ihan hyvä C:n jatke. Sillä voi tehdä puhtaasti pass-by-value-tyyppistä koodia ja silti käyttää olioita, minkä vastaavan toteuttaminen vaatisi C:ssä pointteita ja dynaamista muistin varausta. Ne taas ovat synti jos tehdään koodia vaikka sulautettuun järjestelmään minkä pitää toimia ihan oikeasti (todistetusti).

        Itseasiassa pidän siitä ajatuksesta että käyttää C oliomallia C:n standardikirjaston kanssa. Tämän tietysti C koodaajat tyrmää täysin mutta pidän C omaa standardikirjastoa suurimmaksi osaksi niin hyödyttömänä ettei huvita käyttää.

        C Oliomalli käytännöllä saa mukavan selkeää ja toiminnallisuudeltaan helposti luettavaa koodia aikaan.


    • c++ tohtori

      Muistia ei tarvitse vapauttaa, koska ohjelman suorituksen päätyttyä kaikki muisti vapautetaan automaattisesti. Nykykoneissa on niin paljon muistia, ettei haittaa vaikka jättäisikin muistin vapauttamatta.

      • pröööts

        Taidat olla Nokialla töissä? Ei ihme että firmalla menee huonosti...


      • dfsfsefefefe34535

        Ei tullut mieleen sellainen mahdollisuus jos esim. sovellus pyörii monta tuntia tai päiviä putkeen. Ei siinä kauaa mene kun se on imaissu ja vuotanut kaiken muistin.

        C/C != Java


      • c++ tohtori
        dfsfsefefefe34535 kirjoitti:

        Ei tullut mieleen sellainen mahdollisuus jos esim. sovellus pyörii monta tuntia tai päiviä putkeen. Ei siinä kauaa mene kun se on imaissu ja vuotanut kaiken muistin.

        C/C != Java

        En ole töissä Nokialla vaan eräässä toisessa suuressa IT-alan yrityksessä, jonka nimeä en ala nyt paljastamaan. Kyllä meille annettiin ainakin selkeästi ohjeistus, että niitä muistivuotoja on turha lähteä metsästämään koska ajan voi käyttää paljon tuottavammin. Sillon kun ohjelman suoritus lakkaa, vapautuu muisti. Myös muistin vapautus on sen verran hidas operaatio, että mielummin tekee ohjelmasta vähän nopeamman.

        Harvemmin ne ohjelmat montaa päivää putkeen pyörii, itse ainakin sammutan koneen joka ilta ja käynnistän joka aamu, keskusmuistia on 4 4 gb eli ei ihan heti ala muistivuodon riivaamaan ;)


      • dx
        c++ tohtori kirjoitti:

        En ole töissä Nokialla vaan eräässä toisessa suuressa IT-alan yrityksessä, jonka nimeä en ala nyt paljastamaan. Kyllä meille annettiin ainakin selkeästi ohjeistus, että niitä muistivuotoja on turha lähteä metsästämään koska ajan voi käyttää paljon tuottavammin. Sillon kun ohjelman suoritus lakkaa, vapautuu muisti. Myös muistin vapautus on sen verran hidas operaatio, että mielummin tekee ohjelmasta vähän nopeamman.

        Harvemmin ne ohjelmat montaa päivää putkeen pyörii, itse ainakin sammutan koneen joka ilta ja käynnistän joka aamu, keskusmuistia on 4 4 gb eli ei ihan heti ala muistivuodon riivaamaan ;)

        Varsinainen C tohtori. :) Toivottavasti en työelämässä koskaan törmää tuollaisiin koodareihin tai projektipäälliköihin jotka noin ohjeistavat. Mikä firma mahtaa olla kyseessä, kenties Tieto? :P

        "itse ainakin sammutan koneen joka ilta ja käynnistän joka aamu"

        Jaahas.


      • 24234234242342fgsdfs
        c++ tohtori kirjoitti:

        En ole töissä Nokialla vaan eräässä toisessa suuressa IT-alan yrityksessä, jonka nimeä en ala nyt paljastamaan. Kyllä meille annettiin ainakin selkeästi ohjeistus, että niitä muistivuotoja on turha lähteä metsästämään koska ajan voi käyttää paljon tuottavammin. Sillon kun ohjelman suoritus lakkaa, vapautuu muisti. Myös muistin vapautus on sen verran hidas operaatio, että mielummin tekee ohjelmasta vähän nopeamman.

        Harvemmin ne ohjelmat montaa päivää putkeen pyörii, itse ainakin sammutan koneen joka ilta ja käynnistän joka aamu, keskusmuistia on 4 4 gb eli ei ihan heti ala muistivuodon riivaamaan ;)

        Palvelinsofta?

        Taidat olla trolli. Ja jos et oli niin haluaisin todellakin tietää sen firman joka ohjeistaa moiseen älyttömyyteen.


      • dasm,nbfg,

        Et taida olla ihan välkky.


    Ketjusta on poistettu 0 sääntöjenvastaista viestiä.

    Luetuimmat keskustelut

    1. 107
      1992
    2. Katso: Ohhoh! Miina Äkkijyrkkä sai käskyn lähteä pois Farmi-kuvauksista -Kommentoi asiaa: "En ole.."

      Tämä oli shokkiyllätys. Oliko tässä kyse tosiaan siitä, että Äkkijyrkkä sanoi asioita suoraan vai mistä.... Tsemppiä, Mi
      Tv-sarjat
      54
      1897
    3. Voi kun mies rapsuttaisit mua sieltä

      Saisit myös sormiisi ihanan tuoksukasta rakkauden mahlaa.👄
      Ikävä
      15
      1875
    4. Kyllä poisto toimii

      Esitin illan suussa kysymyksen, joka koska palstalla riehuvaa häirikköä ja tiedustelin, eikö sitä saa julistettua pannaa
      80 plus
      19
      1667
    5. "Joka miekkaan tarttuu, se siihen hukkuu"..

      "Joka miekkaan tarttuu, se siihen hukkuu".. Näin puhui jo aikoinaan Jeesus, kun yksi hänen opetuslapsistaan löi miekalla
      Yhteiskunta
      19
      1587
    6. Haluan jutella kanssasi Nainen

      Olisiko jo aika tavata ja avata tunteemme...On niin paljon asioita joihin molemmat ehkä haluaisimme saada vastaukset...O
      Ikävä
      10
      1380
    7. Haluan tavata Sinut Rakkaani.

      Olen valmis Kaikkeen kanssasi...Tulisitko vastaa Rakkaani...Olen todella valmistautunut tulevaan ja miettinyt tulevaisuu
      Ikävä
      26
      1320
    8. Poliisiauto Omasp:n edessä parkissa

      Poliisiauto oli parkissa monta tuntia Seinäjoen konttorin edessä tänään. Haettiinko joku tai jotain pankista tutkittavak
      Seinäjoki
      11
      1316
    9. Onko mies niin,

      että sinulle ei riitä yksi nainen? Minulle suhde tarkoittaa sitoutumista, tosin eihän se vankila saa olla kummallekaan.
      Tunteet
      14
      1301
    10. Kristityt "pyhät"

      Painukaa helvettiin, mä tulen sinne kans. Luetaan sitten raamattua niin Saatanallisesti. Ehkä Piru osaa opetta?!.
      Kristinusko
      6
      1252
    Aihe