Anonymní profil Kybrex – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Anonymní profil Kybrex – Programujte.comAnonymní profil Kybrex – Programujte.com

 

Příspěvky odeslané z IP adresy 147.32.124.–

Kybrex
C / C++ › Dynamická alokace dvourozměr…
12. 10. 2011   #148520

#1 Kybrex
Když se dívám na ten příspěvek, asi z něj není moc jasný můj problém (přecijen už je pozdě   )

Ve statických polích vím, že musí být druhý rozměr stejný, ani to jinak nejde - a pole se ukládá serializovaně za sebou, ale očekával jsem, že v případě dynamické alokace nebude s tímto problém:

char** pole=new char*[10];

pole[0]=new char[5];
//plním v cyklu, přijdu na to, že se data nevejdou
//>>realokuju pole[0] s překopírováním dat ;)
pole[0]=new char[10]; - mám větší pole a už se vejdu

//pak přejdu na další "řádek"
pole[1]=new char[5]; a v tuto chvíli v debuggeru vidím, jak se mi poslední znaky z pole[0] přepíší na nějaký nesmysl (napr.: z 1001010012 se stane něco jako 1001010\\023 ) - nechápu
Kybrex
C / C++ › Dynamická alokace dvourozměr…
12. 10. 2011   #148519

Zdravím,

mám kód: 

 while((ch=fgetc(file))!=EOF) {
      if(ch=='\n') {
        strSetData[line][i++]='2'; //end of the line
        if((++line)==*size){
          reallocStrSet(strSetData,size,(2*(*size)));//realokuje na větší pole (funguje)
          if(strSetData==0) {
            cout << " failed (realloc error)!" << endl;
            return false;
          }
        }
        //sizeItem=10;// zkusil jsem zakomentovat
        i=0;
        strSetData[line]=new char[sizeItem]; // zde je podezřelý řádek
      }
      
//...
    }

Plním datové pole ze souboru. Jde o binární řetězce, které jsou různě dlouhé. Alokoval jsem paměť pro 50 ukazatelů na řetězce a pak dynamicky podle potřeby inkrementuji proměnnou line, kteoru se pohybuji v poli ukazatelů a pro každý řádek v souboru opět alokuju (2. rozměr) pole pro sadu charů, ale nechápu proč když při načítání prvního řádku, který přesáhne počáteční délku pole charů (a dojde v pořádku k realokaci), tak při vytvoření nového řádku se obvykle smažou (v debuggeru je to vidět) poslední znaky z toho předchozího pole. Znamená to, že není možné mít 2 rozměrné pole s odlišnou délkou 2 rozměru v každém řádku?

 

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý