Ärsyttää lukea kun tästä väitellään ja selitellään, asia on kuitenkin näin:
Tietokone näkee tasan kaksi tilaa, sähköt ON, sähköt OFF, kun viitataan muisti osoitteeseen on arvo 1-64 bittiä, (yleisesti) riippuen prosessorista, käyttöjärjestelmä varaa muistin käyttäen 4-8 tavun osoitinta jolla osoitetaan keskusmuistiin, Muistia ei voi vapauttaa, ainut muistin vapautus tapahtuu sulkemalla virta koneesta, joten käytetään 0-osoitinta kerrotakseen, että tämä alue on vapaa ylikirjoittaa, muisti (ram) voidaan ajaa nollaksi, mutta se ei tarkoita että tämä muistialue olisi vapaa käyttää, siksi muistin osoitin, eli osoite muistiin jonne/jota vapautetaan/luetaan/kirjoitetaan merkitään nollaksi, tällöin kyseinen muistialue on niin sanotusti null, eli vapaa varattavaksi ja käytettäväksi.
Mikä on null, onko se 0?
11
475
Vastaukset
- linkattu lista
Opetttelepa dynaaminen muistinvaraus linkatulla listalla:
http://edu.phkk.fi/opiskelu/mattij/c/dynaamiset.htm
Linkatun listan tietorakenteeeseen voidaan lisätä alkioita, poistaa alkioita (ja vapauttaa muistia), tyhjentää (vapauttaa) koko lista, tai siirtää alkioita listasta toiseen. Tai tehdä linkattuja listoja linkatuista listoista.
NULL viittaa näissä yleensä linkatun listan alkuun (pAlku=NULL) tai loppumerkkiin )pUUsi->pNextr=NULL), malloc ja free komentoja ttarvitaan.. - Malloc Freeman
"Muistia ei voi vapauttaa, ainut muistin vapautus tapahtuu sulkemalla virta koneesta,"
Kyllä voidaan esim. C:ssä mallocilla varattu muisti ja vapautus free-käskyllä.
"joten käytetään 0-osoitinta kerrotakseen, että tämä alue on vapaa ylikirjoittaa,"
Ei toimi. Mutta jos ohjelmointi kielessä on roskienkeruu, niin silloin *näennäisesti* toimii. Tällöinkin tosiasiassa kieli automaattisesti (koodarin "selän takana") varaa muistia malloc:illa ja vapauttaa roskienkeruu-systeemillä free-käskyä käyttäen (tai vastaavilla jos ei käytä C:llä).
Taidat sekoittaa roskienkeruukielet ja käyttöjärjestelmältä suoraan muistia varaavat kielet. - niin___
NULL on toteutustapaspesifinen makro, joka laajennetaan null-osoitinvakioksi, eli käytännössä void-tyyppinen osoitin jonka arvo on 0. Lunttasin tosta: http://people.freebsd.org/~green/c9x-draft.txt ... Monta hauskaa ongelmaa ratkeaa, kun katsoo standardia. En ymmärrä miksi ne yleensä opettaa koulussa aina ensimmäiseksi C:tä. Ketä kiinnostaa tietää, että pointtereille on määritelty vähennyslasku, mutta yhteenlasku johtaa määrittelemättömään käyttäytymiseen. Hieno perinne, tai jotain... Mutta opetettavat asiat menis ehkä paremmin perille jollain vähemmän nippelitietoa vaativalla työkalulla. Arvaa oikein, ja korjaa harjoitusohjelma toimivaksi :D
Muistia voidaan varata ja vapauttaa, ja niin pitääkin tehdä ennen kuin sinne kirjoitetaan. Pitäähän se johonkin kirjata ylös mitkä alueet muistista on käytössä ja mitkä ei.. Null tarkoittaa määrittelemätöntä, tyhjää tai merkityksetöntä arvoa. Se ei siis ole sama kuin 0.
- nillitys jatkuu
Alloc/ReAlloc/Free, 3 tosi asiaa on varata vapaata tilaa, varata edelliseen nähden lisää, jolloin vain näennäisesti osoitetaan uuteen avaruuteen, vapaututtaa varattu tila, ei nollata kuitenkaan muistia vaan tila, mistä ihmeestä revitte tätä paskaa jota tänne syydätte, jos suoraan muistiin kirjoittaa null on aivan sama onko siellä vaikka mitä, järjestelmän "linkkitauluun" kun taasen lyödään null, on muisti vapaa joko alloc/reallloc käskylle, mutta se helvetin null on tasan 0-byte arvo siellä listauksissa, uskokaa tai antakaa assylla screenshot windows/x puolelta jossa oikeaoppisesti näin ei ole..
En ymmärrä miksi tästä aina väitellään, jos muuta mieltä niin todisteet mukaan.- nillitys yhä
Korjaus: ReAlloc myös edelliseen nähden voidaanvarata vähemmän, jolloin tosiasiassa muisti vapautetaan tai merkitään varatuksi (harvoin).
M-KAR
" Null tarkoittaa määrittelemätöntä, tyhjää tai merkityksetöntä arvoa. Se ei siis ole sama kuin 0"
M-KAR kerro minulle millä tavun lukuarvolla koneelle osoitetaan NULL, kerro myös miksi kun olet niin oikeassa ja annappa vielä natiivi c-ohjelma jossa ilman 0 (nolla) merkkiä, ilman null-merkkiä vapautat, sallit muistin yliajoon, eipä onnistu.. nillitys yhä kirjoitti:
Korjaus: ReAlloc myös edelliseen nähden voidaanvarata vähemmän, jolloin tosiasiassa muisti vapautetaan tai merkitään varatuksi (harvoin).
M-KAR
" Null tarkoittaa määrittelemätöntä, tyhjää tai merkityksetöntä arvoa. Se ei siis ole sama kuin 0"
M-KAR kerro minulle millä tavun lukuarvolla koneelle osoitetaan NULL, kerro myös miksi kun olet niin oikeassa ja annappa vielä natiivi c-ohjelma jossa ilman 0 (nolla) merkkiä, ilman null-merkkiä vapautat, sallit muistin yliajoon, eipä onnistu..Se lukuarvo voi olla mitä tahansa. Riippuu ympäristöstä. Ohjelmoija ei käsittele sitä millään numerona vaan NULL:na.
- nillittäjä_
ootko vielä päissäs?
- Malloc Freeman
"En ymmärrä miksi tästä aina väitellään, jos muuta mieltä niin todisteet mukaan."
Sinähän tässä väität jotain (mistä ei oikein saa edes selvää), joten todisteet pitäisi sinun esittää.
Testasin C-ohjelmalla, joka varaa muistia 100 megaa ja kirjoittaa sen roskaa täyteen, jonka jälkeen asettaa poitterin nollaksi. Tulos: muisti ei vapaudu.
(Huom. sinne muistiin pitää kirjoittaa oikeasti jotain, muuten se ei varaa todellista keskusmuistia.)
Mikäli ymmärsin oikein, niin väitit että muisti vapautuu kun asettaa poitterin nollaksi, tuo ohjelma osoitti väitteesi vääräksi.
(En laita koodia tänne, koska jokainen osaa tuollaisen väsätä itse.)
- NULL on sopimus
NULL on tietokoneen nolla, joka voi olla ihmiselle vaikka 123.456. Kuitenkin ihminen voi keskustella tasan nollasta tietokoeen kanssa kertomalla tietokoneelle, että nyt on puhe nollasta eli NULL: ista
- Nollaa ei tiedetä
Myös eri tietokoneet voivat sujuvasti keskustella keskenään nollasta, vaikka niillä olisi täysin eri mielipide nollan paikasta lukualueessa. Kertomalla muille tietokoneille, että nyt on puhe nollasta eli NULL: ista mikä tahana tietokonekin voi olla varma siitä, että kaikki muut tietokoneetkin ymmärtävät, että niittenkin pitää katsoa omaa nollaansa eli NULL: ia, joka on multiuniversaali eli tarkoittaa samaa kaikissa tietokoneuniversumeissa eli kaikkissa mahdollisissa lukualueissa, joissa nollan paikka voi olla missä tahansa. Tämä on jo siitäkin syystä järkevää, ettei edes ihmiskunnalla ole täysin selvää käsitystä siitä, mikä nolla itseasiassa on. Tämä ilmenee siinä, että heti, kun joku matemaatikoistamme lausuu nollasta jotain uutta ja järkevää, hänelle myönnetään matematiikan Nobel-palkinto.
Ketjusta on poistettu 0 sääntöjenvastaista viestiä.
Luetuimmat keskustelut
Kuka tekee näitä aloituksia
jotka aina ovat tällaisia.... Nämä on jonkun saman ihmisen käsialaa, joka paukuttaa tänne loputtomasti ketjuja, joissa353912Persujen kannatusromahduksen syynä bensan ja kaljan hinnan nostot
Marinin aikaan bensalitra 1,3e ja laatikon Sandelsia sai Lidlistaä 22 eurolla. Nyt hinnat ovat nousseet noin 50 prosent2473429Juhana Vartiainen(ex-sd): Köyhien pitää tehdä jotain elämälleen säilyttääkseen tukensa
Juhana Vartiainen ehdottaa Suomeen ”Tanskan mallia”, jossa sosiaaliturvaa saadakseen pitäisi hakea ensisijaisesti etuuks2503218Miksi tunnustukselliset muslimit saapuvat länteen?
Onko koskaan kysytty, että miksi islamilaisesta maailmasta tuleva tunnustuksellinen muslimi tarvitsisi turvapaikkaa väär2672487En ymmärrä näitä SDP:n ja muun vasemmiston kannattajia
Eivätkö ihmiset tiedä, että Suomen ongelmat johtuvat vasemmistolaisesta yhteiskuntamallista? Suomessa on ollut vasemmis1261717Oot mahtava tyyppi
En tiedä luetko palstaa. Koitan siitä huolimatta. Oot mun mielestä tosi erityinen tyyppi. Nopeesti taisin ihastua. Jot261679Rydmanin nousu sote-ministeriksi on kauttaaltaan irvokas
Mutta samalla se oli ainut todennäköinen lopputulema. Se myös alleviivaa sitä, mistä tällä hallituksella ja aivan erityi2461468Sofia servasi Pikku-Villen suvereenisti
– Ihanko tosissaan tuleva sosiaali- ja terveysministeri hyökkää oppositiopuolueen puheenjohtajaa vastaan siksi, että täm111305- 1201105
viikonloppu lähestyy
ja tiiän sen jo valmiiks et en pysty olee selvinpäin. oisitpa kieltämässä ja rauhoittamassa minua. en tiedä olisiko sinu191089