Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Dynamiczna tablica w tablicy

Ostatnio zmodyfikowano 2013-06-29 19:12
Autor Wiadomość
berkov
Temat założony przez niniejszego użytkownika
» 2013-06-28 16:44:02
tez mi sie tak wydawal a jednak robie cos zle bo dostaje blad:
Unhandled exception at 0x012AD2B9 in xxxx.exe: 0xC0000005: Access violation writing location 0xBAADF00D.

C/C++
int ilosc = 22;
char ** tablica = new char *[ ilosc ];
strcpy( tablica[ 1 ], "sdsdsda" ); //tu wyskakuje blad
P-86472
pekfos
» 2013-06-28 16:46:06
Nie przydzieliłeś pamięci dla tablica[1].
P-86474
berkov
Temat założony przez niniejszego użytkownika
» 2013-06-28 16:49:04
czyli dla kazdego elementu mam przydzielac pamiec?
na tym cala rzecz polega, ja nie wiem ile tych elementow bedzie, tu dalem ilosc = 22; ale tylko dla przykladu bo ta wartosc dostane dopiero w runtime.

"dynamiczne przydzielanie w dynamicznym przydzielaniu"?!?
P-86475
berkov
Temat założony przez niniejszego użytkownika
» 2013-06-28 16:51:06
chodzi mi o to zeby na poczatku zdefiniowac moja tablice w tablicy wiedzac ze elementow bedzie int ilosc a dlugosc stringu w kazdym elemencie bedzie 36.
P-86476
pekfos
» 2013-06-28 16:51:58
Dynamicznie przydzielasz n wskaźników na miejsca na c-stringi.

na tym cala rzecz polega, ja nie wiem ile tych elementow bedzie, tu dalem ilosc = 22; ale tylko dla przykladu bo ta wartosc dostane dopiero w runtime.
Dlatego przydzielasz dynamicznie. Oj podstawy, podstawy..

Od biedy możesz użyć jednej tablicy jednowymiarowej, ale wtedy musisz pilnować, czy operacje na c-stringu nie nadpisują następnych w tablicy itp.
P-86477
berkov
Temat założony przez niniejszego użytkownika
» 2013-06-28 16:57:05
Innymi slowy dalej nie wiem jak to zrobic, ale dzieki za pomoc!
P-86480
pekfos
» 2013-06-28 17:07:03
Chcesz mieć tablicę
char tablica[ n ][ 36 ];
, więc:

Jeśli chcesz to koniecznie zrobić na tablicy dwuwymiarowej, to musisz zaalokować n wskaźników, które będą wskazywać na bloki po 36 bajtów każdy (miejsce na c-stringa)
C/C++
char ** tablica = new char *[ n ]; //tablica wskaźników
tablica[ x ] = new char[ 36 ]; //tworzenie bloku dla jednego c stringa pod indeksem x

Na tablicach jednowymiarowych wyglądało by to tak:
C/C++
char * tablica = new char[ 36 * n ];

strcpy( tablica + x * 36, "jakisstring" ); //zapisanie stringa pod "indeks" x

//lub bardziej bezpiecznie:
strncpy( tablica + x * 36, "jakisstring", 35 );
tablica[ x * 36 + 35 ] = 0;
Tu musisz uważać, by nie uszkodzić innych stringów, a przy powiększaniu tablicy, kopiować całość.
P-86482
berkov
Temat założony przez niniejszego użytkownika
» 2013-06-29 19:12:06
wlasnie o to mi chodzilo:

C/C++
char ** tablica = new char *[ n ]; //tablica wskaźników
tablica[ x ] = new char[ 36 ]; //tworzenie bloku dla jednego c stringa pod indeksem x


wielkie dzieki.
P-86565
1 « 2 »
Poprzednia strona Strona 2 z 2