Malloc

Osaisikohan joku kertoa, mikä mahdollisesti on pielessä, kun saan jatkuvasti seuraavasta koodinkohdasta virheen "segmentation fault"...

*tulos = malloc((luettu 1)*sizeof(char))

(Siinä on ympärillä if-lause, if(...) == NULL jne, mutta sinne asti ohjelma ei ikinä pääse.)
3315
Äänestä

Muut lukivat myös

Vastaukset 3

Vanhimmat

*tulos tarkoittaa tulos-osoittimen osoittamaa arvoa muistissa. tämä ei ole se mitä haet takaa.
tee näin:

char* tulos = 0;
tulos = (char*)malloc((luettu 1)*sizeof(char));

Äänestä
  • Ja lisäyksenä voisi sanoa, että se virhe eli segfaultti tulee luultavasti siitä, että tuonne tuloksen osoittamaan arvoon yritetään kirjoittaa. Jos poistat sen tähtösen, niin segfaultti katoaa, mutta sitä ei tiedä, onko ohjelma vielä oikein.

    Pointterit ovat vaikeita. Kertaapa mitä se * tarkoittaa määrittelyssä ja mitä käytössä. (Suunnattu alkup. kysyjälle, ei neuvojalle.)

    Äänestä

  • Mistä virhe kirjoitti:

    Ja lisäyksenä voisi sanoa, että se virhe eli segfaultti tulee luultavasti siitä, että tuonne tuloksen osoittamaan arvoon yritetään kirjoittaa. Jos poistat sen tähtösen, niin segfaultti katoaa, mutta sitä ei tiedä, onko ohjelma vielä oikein.

    Pointterit ovat vaikeita. Kertaapa mitä se * tarkoittaa määrittelyssä ja mitä käytössä. (Suunnattu alkup. kysyjälle, ei neuvojalle.)

    Äh, sori, huonosti muotoiltu kysymys. Itse asiassa sen oli ihan tarkotus olla *taulu siinä missä olikin, kun se mun alkuperäinen muuttuja oli char**-tyyppinen. Tän olis voinut tietty mainita...mutta nyt sainkin sen toimimaan, mun virhe olikin pääohjelmassa, jossa kutsuin funktiotani väärällä tavalla (määrittelin muuttujan **char ja kutsuin sen nimellä, vaikka piti olla *char ja kutsun edessä &-merkki..)

    Kiitos paljon silti jälleen, molemmille. :)

    Äänestä

Kommentoi aloitusta


Ninni-maanvaiva kirjoitti:

Osaisikohan joku kertoa, mikä mahdollisesti on pielessä, kun saan jatkuvasti seuraavasta koodinkohdasta virheen "segmentation fault"...

*tulos = malloc((luettu 1)*sizeof(char))

(Siinä on ympärillä if-lause, if(...) == NULL jne, mutta sinne asti ohjelma ei ikinä pääse.)

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