uzsolt

Hozzászólások

10 bejegyzés megtekintése - 2,871-2,880 / 9,618
  • Szerző
    Bejegyzés
  • Hozzászólás: Szegmens hiba – de miért? #2164543
    uzsolt
    Felhasználó

      Értem, mire gondolsz. Csak a probléma, hogy így is szegmens hibát produkál 🙁
      30, 31-ig eljut, aztán kalap…

      Code:
      int nc_readdir (char *dir , nc_file **files ) {
          DIR *d_dir;
          struct dirent *d_file;
          struct stat prop;
          int max = 30;
          /// return value – Number Of Files
          int nof=0 , idx=0;

          d_dir = opendir(dir);
          if (!d_dir) {
      #ifdef DEBUG
              pr_debug(„couldn’t read”);
      #endif
              return -1;
          }

      #ifdef DEBUG
          pr_debug(„malloc files”);
      #endif
          (*files) = malloc(sizeof(nc_file)*(max));
          if ( (*files) == NULL ) return -1;
      #ifdef DEBUG
          pr_debug(„mallocing ok”);
      #endif

          while ( (d_file=readdir(d_dir)) != NULL ) {
              nof++;
              if ( max == (nof) ) {
      #ifdef DEBUG
                  pr_debug(„reallocing”);
      #endif
                  max += 50;
      #ifdef DEBUG
                  printf(„max = %dn”,max);
      #endif
                  (*files) = realloc(*files,sizeof(nc_file)*max);
                  if ((*files) == NULL) {
                      return -1;
                  }
      #ifdef DEBUG
                  pr_debug(„realloc ok”);
      #endif
              }
      #ifdef DEBUG
              pr_debug(„strdup”);
              printf(„%d. %sn”,nof,d_file->d_name);
      #endif
              (*files)[idx].name = strdup((char*)(d_file->d_name));
      #ifdef DEBUG
              pr_debug(„strdup ok”);
      #endif
      #ifdef DEBUG
              pr_debug(„stat”);
      #endif
              (*files)[idx].props=malloc(sizeof(stat));
      // INNEN KIVETTEM AZ nc_strcat-os SORT!!!
      #ifdef DEBUG
              pr_debug(„stat ok”);
      #endif
              idx++;
          }
          closedir(d_dir);
          return nof;
      }

      Javaslom, hogy próbáld ki, biztos valami hülyeség, amit így „ránézésre” nem veszel észre. Én meg működés közben sem…

      Hozzászólás: Szegmens hiba – de miért? #2164538
      uzsolt
      Felhasználó
        gabaman wrote:
        Mi a nof? A fájlok száma?
        Annak készült (number of files).

        gabaman wrote:
        Akkor méret típusú.
        Mármint size_t? Úgyse jó 🙁
        Egy plusz index bevezetésével se (ami int típusú, nulláról indul, és a ciklus végén növelem).
        Hozzászólás: Szegmens hiba – de miért? #2164539
        uzsolt
        Felhasználó
          gabaman wrote:
          Mi a nof? A fájlok száma?
          Annak készült (number of files).

          gabaman wrote:
          Akkor méret típusú.
          Mármint size_t? Úgyse jó 🙁
          Egy plusz index bevezetésével se (ami int típusú, nulláról indul, és a ciklus végén növelem).
          Hozzászólás: Szegmens hiba – de miért? #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ó.

            Hozzászólás: Szegmens hiba – de miért? #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ó.

              Hozzászólás: Szegmens hiba – de miért? #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.

                Hozzászólás: Szegmens hiba – de miért? #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.

                  Hozzászólás: Szegmens hiba – de miért? #2164520
                  uzsolt
                  Felhasználó

                    Egyrészt nem az strdup függvénnyel van gond, tudom, hogyan kell használni.
                    Közben, mintha nem foglalna magának elég memóriát, vagy rossz helyre foglalata, a fene tudja.
                    Szerintem a függvény nevéből (nc_readdir) kitalálható, hogy mit csinál: beolvassa a könyvtár tartalmát, és a fájlok listáját és tulajdonságait visszaadja a **files-ba.
                    Vagy soronként magyarázzam?

                    Próbáld ki a következő main-függvénnyel:

                    Code:
                    int main (int argc , char **argv) {
                        nc_file *files;
                        int mennyi,i;

                        mennyi = nc_readdir(argv[1],&files);

                        for (i=0; i<mennyi; i++) {
                            printf("%sn",files[i].name);
                        }

                        return 0;
                    }

                    Persze paramétert adj neki 🙂 Próbáld ki egy-két könyvtárra, és meglátod.

                    Hozzászólás: Szegmens hiba – de miért? #2164521
                    uzsolt
                    Felhasználó

                      Egyrészt nem az strdup függvénnyel van gond, tudom, hogyan kell használni.
                      Közben, mintha nem foglalna magának elég memóriát, vagy rossz helyre foglalata, a fene tudja.
                      Szerintem a függvény nevéből (nc_readdir) kitalálható, hogy mit csinál: beolvassa a könyvtár tartalmát, és a fájlok listáját és tulajdonságait visszaadja a **files-ba.
                      Vagy soronként magyarázzam?

                      Próbáld ki a következő main-függvénnyel:

                      Code:
                      int main (int argc , char **argv) {
                          nc_file *files;
                          int mennyi,i;

                          mennyi = nc_readdir(argv[1],&files);

                          for (i=0; i<mennyi; i++) {
                              printf("%sn",files[i].name);
                          }

                          return 0;
                      }

                      Persze paramétert adj neki 🙂 Próbáld ki egy-két könyvtárra, és meglátod.

                      Hozzászólás: Zenwalk 5.2 samsung nyomtató #2164514
                      uzsolt
                      Felhasználó

                        Roppant egyszerű, nekem is ilyen van.
                        Eszerint a splix driver kell neki. Ezután a [url url=http://localhost:631]http://localhost:631[/url]-en már be tudod állítani.

                      10 bejegyzés megtekintése - 2,871-2,880 / 9,618