Szegmens hiba – de miért?

Kezdőlap Fórumok Programozás Szegmens hiba – de miért?

10 bejegyzés megtekintése - 11-20 / 77
  • Szerző
    Bejegyzés
  • #2164528
    pointux
    Felhasználó

      uzsolt: arra azért vigyázz, hogy az strdup (nem egy ref. pointert ad), ugyanúgy fel kell szabadítani az általa lefoglalt memória területet free-vel, mintha malloc-kal foglaltad volna le.

      #2164529
      pointux
      Felhasználó

        uzsolt: arra azért vigyázz, hogy az strdup (nem egy ref. pointert ad), ugyanúgy fel kell szabadítani az általa lefoglalt memória területet free-vel, mintha malloc-kal foglaltad volna le.

        #2164530
        uzsolt
        Felhasználó
          gabaman wrote:
          uzsolt wrote:
          Valamint ha /home/zsolt/data paraméterrel hívom az nc_readdir-t, akkor jó. Ha /home/zsolt/data/-val, akkor szegmens hiba.
          Talán jobban megérted mi a különbség a két név, ha utánanézel mi mivel kompatibilis. A /home/zsolt/data ugynaz mint a /home/zsolt/data/. (per pont), és a /home/zsolt/data/ ugynaz mint a /home/zsolt/data/* (per csillag). Nézd meg a path paraméter utolsó karakterét, ha ‘/’ akkor tegyél oda egy sor végét (0).
          OK, majd végiggondolom, de most nem ez a legfontosabb (számomra).

          gabaman wrote:
          Ez a gond. Ha nincs elem, akkor a nof értéke -1, a (*files)[nof].name miatt lesz szegmens hiba, mert a nulladik elem előtti helyre ír. A nof értékét növeld a ciklus végén:
          Nem-nem, amit // end of ‘while’-nak gondoltál, az „csak” az if-hez tartozik (márminthogy kell-e bővíteni a foglalt memóriát), és a (*files)[nof] a while-on belül van. Tehát ha -1-ről kezdünk, akkor mire odaér, addigra már egyszer növeltük.

          De azért átírtam, hogy nulláról kezdjünk, és a ciklus végén növeljünk, a hiba ugyanaz. A 30. elemnél szegmensezik.

          vizsla wrote:
          uzsolt: arra azért vigyázz, hogy az strdup (nem egy ref. pointert ad), ugyanúgy fel kell szabadítani az általa lefoglalt memória területet free-vel, mintha malloc-kal foglaltad volna le.

          Tudok róla, az awesome-status programom írása közben rájöttem (tele is van olyan megjegyzésekkel, hogy ‘// malloc’, az strdup-os sorok végén, hogy ne felejtsek el felszabadítani).
          Amúgy ha az strdup-os sort kitörlöd/kommenteled, akkor is gikszer van.

          #2164531
          uzsolt
          Felhasználó
            gabaman wrote:
            uzsolt wrote:
            Valamint ha /home/zsolt/data paraméterrel hívom az nc_readdir-t, akkor jó. Ha /home/zsolt/data/-val, akkor szegmens hiba.
            Talán jobban megérted mi a különbség a két név, ha utánanézel mi mivel kompatibilis. A /home/zsolt/data ugynaz mint a /home/zsolt/data/. (per pont), és a /home/zsolt/data/ ugynaz mint a /home/zsolt/data/* (per csillag). Nézd meg a path paraméter utolsó karakterét, ha ‘/’ akkor tegyél oda egy sor végét (0).
            OK, majd végiggondolom, de most nem ez a legfontosabb (számomra).

            gabaman wrote:
            Ez a gond. Ha nincs elem, akkor a nof értéke -1, a (*files)[nof].name miatt lesz szegmens hiba, mert a nulladik elem előtti helyre ír. A nof értékét növeld a ciklus végén:
            Nem-nem, amit // end of ‘while’-nak gondoltál, az „csak” az if-hez tartozik (márminthogy kell-e bővíteni a foglalt memóriát), és a (*files)[nof] a while-on belül van. Tehát ha -1-ről kezdünk, akkor mire odaér, addigra már egyszer növeltük.

            De azért átírtam, hogy nulláról kezdjünk, és a ciklus végén növeljünk, a hiba ugyanaz. A 30. elemnél szegmensezik.

            vizsla wrote:
            uzsolt: arra azért vigyázz, hogy az strdup (nem egy ref. pointert ad), ugyanúgy fel kell szabadítani az általa lefoglalt memória területet free-vel, mintha malloc-kal foglaltad volna le.

            Tudok róla, az awesome-status programom írása közben rájöttem (tele is van olyan megjegyzésekkel, hogy ‘// malloc’, az strdup-os sorok végén, hogy ne felejtsek el felszabadítani).
            Amúgy ha az strdup-os sort kitörlöd/kommenteled, akkor is gikszer van.

            #2164532
            gabaman
            Felhasználó

              Itt egy másik hiba:

              Code:
              if ( max == (nof) ) {

              Mi a nof? A fájlok száma? Akkor méret típusú. De indexként is használod, aminek az értéke mindig egyel kevesebb, mint a méret. Könnyebb lenne egy idx változót bevezetned, mert így magadat kevered meg.

              Code:
              if ( max == (nof + 1) ) {
              #2164533
              gabaman
              Felhasználó

                Itt egy másik hiba:

                Code:
                if ( max == (nof) ) {

                Mi a nof? A fájlok száma? Akkor méret típusú. De indexként is használod, aminek az értéke mindig egyel kevesebb, mint a méret. Könnyebb lenne egy idx változót bevezetned, mert így magadat kevered meg.

                Code:
                if ( max == (nof + 1) ) {
                #2164534
                gabaman
                Felhasználó
                  uzsolt wrote:
                  Nem-nem, amit // end of ‘while’-nak gondoltál, az „csak” az if-hez tartozik (márminthogy kell-e bővíteni a foglalt memóriát), és a (*files)[nof] a while-on belül van. Tehát ha -1-ről kezdünk, akkor mire odaér, addigra már egyszer növeltük.

                  De azért átírtam, hogy nulláról kezdjünk, és a ciklus végén növeljünk, a hiba ugyanaz. A 30. elemnél szegmensezik.

                  Igaz, sorry. Elnéztem. Viszont tényleg a nof okozza a hibát, mert nem jól használod (lásd méret vs index).

                  #2164535
                  gabaman
                  Felhasználó
                    uzsolt wrote:
                    Nem-nem, amit // end of ‘while’-nak gondoltál, az „csak” az if-hez tartozik (márminthogy kell-e bővíteni a foglalt memóriát), és a (*files)[nof] a while-on belül van. Tehát ha -1-ről kezdünk, akkor mire odaér, addigra már egyszer növeltük.

                    De azért átírtam, hogy nulláról kezdjünk, és a ciklus végén növeljünk, a hiba ugyanaz. A 30. elemnél szegmensezik.

                    Igaz, sorry. Elnéztem. Viszont tényleg a nof okozza a hibát, mert nem jól használod (lásd méret vs index).

                    #2164536
                    uzsolt
                    Felhasználó
                      zoltan22 wrote:
                      Az nc_strcat-ot megoldottam egy

                      Code:
                      #define nc_strcat strcat

                      -al.
                      Lényegében az, csak arra kell, hogy a könyvtárat meg a fájlnevet összefűzze a stat miatt.

                      zoltan22 wrote:
                      Futtattasi eredmenyek nalam:

                      Ez a hiba igy meg sokszor ismetlodik.

                      Hú, ennek nagyon örülök. Csak egy baj van: nem tudok vele mit kezdeni (azaz: nem értem, a forrásban mifélét keressek, ami ezt okozza)  🙁
                      Egyébként nálam is hasonló.

                      #2164537
                      uzsolt
                      Felhasználó
                        zoltan22 wrote:
                        Az nc_strcat-ot megoldottam egy

                        Code:
                        #define nc_strcat strcat

                        -al.
                        Lényegében az, csak arra kell, hogy a könyvtárat meg a fájlnevet összefűzze a stat miatt.

                        zoltan22 wrote:
                        Futtattasi eredmenyek nalam:

                        Ez a hiba igy meg sokszor ismetlodik.

                        Hú, ennek nagyon örülök. Csak egy baj van: nem tudok vele mit kezdeni (azaz: nem értem, a forrásban mifélét keressek, ami ezt okozza)  🙁
                        Egyébként nálam is hasonló.

                      10 bejegyzés megtekintése - 11-20 / 77
                      • Be kell jelentkezni a hozzászóláshoz.