Goto page 1, 2, 3, 4 Next
Lelek@
Guest
Mon Feb 07, 2011 7:11 am
Witam,
Nie wnikając w szczegóły, napisałem pierwszy program ale doszedłem do
miejsca gdzie się wszystko kompiluje ale po uruchomieniu aplikacja zamyka mi
się przez jedną linijke kodu.
Jest to java oczywiście.
jest sobie zadeklarowany bufor bajtowy
byte buf[] = new byte[256];
I chcę sobie z niego odczytać cokolwiek robiąc casting czy tam nawet bez
niego
int X = (int)buf[0];
lub bez
byte Y = buf[2];
i dokładnie taka linijka w kodzie wywala mi cały program. "Program przestał
działać czy go zamknąć na siłę" takie okienko wyskakuje ale kompiluje sie
ok.
Nie mam pomysłu

Pomocy

Tylko ta linijka. może czegoś nie wolno mi
robić na bajtowych buforach o czym nie wiem? Zapisuje do niego inną metodą,
umiem z niego odczytywać przy pomocy setText(), dane są w buforze prawidłowe
ale muszę go czasem przelecieć w pętli i czegoś poszukać i nie mogę
Artur M. Piwko
Guest
Mon Feb 07, 2011 8:26 am
In the darkest hour on Mon, 7 Feb 2011 07:11:11 +0100,
Lelek@ <nn@nndn.pl> screamed:
Quote:
Nie wnikając w szczegóły, napisałem pierwszy program ale doszedłem do
miejsca gdzie się wszystko kompiluje ale po uruchomieniu aplikacja zamyka mi
się przez jedną linijke kodu.
Jest to java oczywiście.
jest sobie zadeklarowany bufor bajtowy
byte buf[] = new byte[256];
Tak na szybko...
byte[] buf = ...?
--
[ Artur M. Piwko : Pipen : AMP29-RIPE : RLU:100918 : From == Trap! : SIG:222B ]
[ 08:25:58 user up 12706 days, 20:20, 1 user, load average: 0.69, 0.01, 0.59 ]
Baroque (adj.): When you are out of Monet.
Shaman
Guest
Mon Feb 07, 2011 9:45 am
Dnia 07-02-2011 o 08:26:16 Artur M. Piwko <milusi.pysiaczek@buziaczek.pl>
napisał(a):
Quote:
In the darkest hour on Mon, 7 Feb 2011 07:11:11 +0100,
Lelek@ <nn@nndn.pl> screamed:
Nie wnikając w szczegóły, napisałem pierwszy program ale doszedłem do
miejsca gdzie się wszystko kompiluje ale po uruchomieniu aplikacja
zamyka mi
się przez jedną linijke kodu.
Jest to java oczywiście.
jest sobie zadeklarowany bufor bajtowy
byte buf[] = new byte[256];
Tak na szybko...
byte[] buf = ...?
Też jestem zwolennikiem takiego zapisu, ale to raczej nie może być
przyczyną problemów.
Proponuję:
1. sprawdzić jak zachowuje się odczyt z tablicy deklarowanej statycznie
jaki private.
2. czyścić/zerować tablicę tworzoną dynamicznie przed jej odczytem
3. używać normalnego słownictwa bo aż człowieka skręca czyta "casting"
zamiast "rzutowanie"
zaznaczam, że nie znam androidowego SDK ani ichniejszej maszyny
wirtualnej, to są jedynie luźne pomysły (za wyjątkiem pkt3

)
--
PZDR
Shaman
Lelek@
Guest
Mon Feb 07, 2011 12:39 pm
"Shaman" <some@one.com> wrote in message news:op.vqiyljhl4limig@sioux...
Dnia 07-02-2011 o 08:26:16 Artur M. Piwko <milusi.pysiaczek@buziaczek.pl>
Już wiem co jest.
Ten bufor nie istnieje jeżeli nic się tam nie wpisze i próba odczytu buf[0]
bez wcześniejszego wpisania czegoś skutkuje totalną wywałką tak jakby
wyskakiwał wyjątek nie wiadomo od czego. To jest java, a nie C++ co mnie
bardzo denerwuje, szczególnie brak "unsigned" - to jest już totalna porażka.
Ta java to takie C++ dla półgłówków, którzy mieli problem ze zrozumieniem
wskaźników, struktur i wykonywania kodu

Tragedia ale nie ma wyjścia.
J.F.
Guest
Mon Feb 07, 2011 12:47 pm
On Mon, 07 Feb 2011 09:45:09 +0100, Shaman wrote:
Quote:
3. używać normalnego słownictwa bo aż człowieka skręca czyta "casting"
zamiast "rzutowanie"
Rzutowanie to rzutowanie, wymienic odpowiedzialnych autorow ktorzy
zastosowali do C :)
P.S. Casting ? Odlewanie. I nie mamy na mysli egzaminu dla aktorek :-)
J.
Zbych
Guest
Mon Feb 07, 2011 1:18 pm
W dniu 2011-02-07 12:39, Lelek@ pisze:
Quote:
Ten bufor nie istnieje jeżeli nic się tam nie wpisze i próba odczytu
buf[0] bez wcześniejszego wpisania czegoś skutkuje totalną wywałką tak
jakby wyskakiwał wyjątek nie wiadomo od czego.
Pewnie wynika to z optymalizacji - alokacja zasobów dopiero przy
pierwszym dostępie. W sumie niezły bat na "specjalistów" od
niezainicjalizowanych zmiennych

.
MikoĹaj Tutak
Guest
Mon Feb 07, 2011 3:06 pm
W dniu 2011-02-07 07:11, Lelek@ pisze:
Quote:
byte buf[] = new byte[256];
I chcę sobie z niego odczytać cokolwiek robiąc casting czy tam nawet bez
niego
int X = (int)buf[0];
int X = (int)buf;
lub
int X = (int)&(buf[0]);
Quote:
lub bez
byte Y = buf[2];
byte Y = (byte)(buf+2);
tak lepiej?
--
pozdrawiam
Mikołaj
ohouapss
Guest
Mon Feb 07, 2011 7:28 pm
On 7 Lut, 12:39, "Lelek@" <n...@nndn.pl> wrote:
Quote:
Już wiem co jest.
Ten bufor nie istnieje jeżeli nic się tam nie wpisze i próba odczytu buf[0]
bez wcześniejszego wpisania czegoś skutkuje totalną wywałką
Nie znam sdk Androida, ale dolary przeciw kamieniom, że błąd jest
zupełnie gdzie indziej niż Ci się wydaje. Ta tablica powinna się
automatycznie wypełnić zerami i jak najbardziej bufor istnieje.
Adam Dybkowski
Guest
Mon Feb 07, 2011 11:15 pm
W dniu 2011-02-07 07:11 Lelek@ napisał(a):
Quote:
Nie wnikając w szczegóły, napisałem pierwszy program ale doszedłem do
miejsca gdzie się wszystko kompiluje ale po uruchomieniu aplikacja
zamyka mi
się przez jedną linijke kodu.
[...]
Zobacz co pokazuje LogCat. Tam będzie informacja dlaczego program się
wywalił.
BTW: NTG?
--
Adam Dybkowski
http://dybkowski.net/
Uwaga: przed wysłaniem do mnie maila usuń cyfry z adresu.
Lelek@
Guest
Tue Feb 08, 2011 12:16 am
"Adam Dybkowski" <adybkows12@45wp.pl> wrote in message
news:iipqur$fq$2@news.onet.pl...
Quote:
W dniu 2011-02-07 07:11 Lelek@ napisał(a):
Zobacz co pokazuje LogCat. Tam będzie informacja dlaczego program się
wywalił.
Nie wiem co to jest LogCat

Od kilku dni się tym zajmuję

.
Wiem jedno, że ten buf[256] zapełniam wpisując w niego null terminated
string. I jeżeli czytam poza długością wpisanego stringa to zawsze jest ten
efekt ale dziwi mnie czemu mimo zadeklarowania rozmiaru on tak to traktuje.
To zachowanie ma miejsce tylko dla byte. dla int tablica istnieje.
Obszedłem to ale weź sobie zapodaj w kodzie takie dwie linijki, jedna
deklaracja i niżej Y = buf[10] i skompiluj i uruchom. Wywałka murowana
gdziekolwiek nie postawisz byle się wykonało.
Adam Dybkowski
Guest
Tue Feb 08, 2011 10:40 pm
W dniu 2011-02-08 00:16 Lelek@ napisał(a):
Quote:
Zobacz co pokazuje LogCat. Tam będzie informacja dlaczego program się
wywalił.
Nie wiem co to jest LogCat

Od kilku dni się tym zajmuję

.
Wiem jedno, że ten buf[256] zapełniam wpisując w niego null terminated
string. I jeżeli czytam poza długością wpisanego stringa to zawsze jest
ten efekt ale dziwi mnie czemu mimo zadeklarowania rozmiaru on tak to
traktuje.
To zachowanie ma miejsce tylko dla byte. dla int tablica istnieje.
Obszedłem to ale weź sobie zapodaj w kodzie takie dwie linijki, jedna
deklaracja i niżej Y = buf[10] i skompiluj i uruchom. Wywałka murowana
gdziekolwiek nie postawisz byle się wykonało.
Wygląda na to, że byłem pierwszy, który to sprawdził doświadczalnie.
Takie linijki dodałem na końcu onCreate w głównej mojej klasie
dziedziczącej po Activity:
byte buf[] = new byte[256];
byte y = buf[10];
Log.d("TEST", "WARTOSC Y=" + String.valueOf(y));
Sprawdzałem w emulatorach 1.5 oraz 2.2. W obu przypadkach zachowanie
jest identyczne i przewidywalne. Świeżo alokowany blok 256 bajtów jest
standardowo wypełniony zerami i to widzę w LogCat:
02-08 21:39:22.351: DEBUG/TEST(848): WARTOSC Y=0
Program się nie wywalił i działa normalnie. Może masz wywałkę z innego
powodu...
--
Adam Dybkowski
http://dybkowski.net/
Uwaga: przed wysłaniem do mnie maila usuń cyfry z adresu.
Lelek@
Guest
Tue Feb 08, 2011 11:48 pm
"Adam Dybkowski" <adybkows12@45wp.pl> wrote in message
news:iisd8q$6td$1@news.onet.pl...
Quote:
W dniu 2011-02-08 00:16 Lelek@ napisał(a):
Zobacz co pokazuje LogCat. Tam będzie informacja dlaczego program się
wywalił.
Program się nie wywalił i działa normalnie. Może masz wywałkę z innego
powodu...
Powiem ci, że nie mam pojęcia
byte y = buf[10];
Ta linijka mi załatwia sprawę :-)
Jeszcze wrócę do sprawy jutro

Nie daje mi to spokoju
Jacek Radzikowski
Guest
Tue Feb 08, 2011 11:58 pm
On 02/08/2011 05:48 PM, Lelek@ wrote:
Quote:
"Adam Dybkowski" <adybkows12@45wp.pl> wrote in message
news:iisd8q$6td$1@news.onet.pl...
W dniu 2011-02-08 00:16 Lelek@ napisał(a):
Zobacz co pokazuje LogCat. Tam będzie informacja dlaczego program się
wywalił.
Program się nie wywalił i działa normalnie. Może masz wywałkę z innego
powodu...
Powiem ci, że nie mam pojęcia
byte y = buf[10];
Ta linijka mi załatwia sprawę :-)
Jeszcze wrócę do sprawy jutro

Nie daje mi to spokoju
Opakuj tę linijkę w blok try/catch i zobacz czy coś się złapie. Jak
wejdziesz w obsługę wyjątku, to znaczy że ta linijka bruździ. Jeśli
dalej się będzie wywalać, to znaczy że co problem jest gdzieś indziej.
pzdr.
j.
J.F.
Guest
Wed Feb 09, 2011 12:02 am
On Tue, 8 Feb 2011 23:48:49 +0100, Lelek@ wrote:
Quote:
Powiem ci, że nie mam pojęcia
byte y = buf[10];
Ta linijka mi załatwia sprawę :-)
Jeszcze wrócę do sprawy jutro

Nie daje mi to spokoju
Jest tam jakas opcja wydruku w "assemblerze" ?
Moze sie cos ujawni .
J.
Adam Dybkowski
Guest
Wed Feb 09, 2011 1:04 am
W dniu 2011-02-09 00:02 J.F. napisał(a):
Quote:
Powiem ci, że nie mam pojęcia
byte y = buf[10];
Ta linijka mi załatwia sprawę :-)
Jeszcze wrócę do sprawy jutro

Nie daje mi to spokoju :-)
Jest tam jakas opcja wydruku w "assemblerze" ?
Moze sie cos ujawni .
W Javie? Zawsze możesz zrobić disassemblację pliku classes.dex z
wewnątrz instalki apk. Ale pewnie dużo się nie wyjaśni dopóki Lelek nie
napisze, co mu LogCat wywala przy tym błędzie.
--
Adam Dybkowski
http://dybkowski.net/
Uwaga: przed wysłaniem do mnie maila usuń cyfry z adresu.
Goto page 1, 2, 3, 4 Next