eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronikaAndroid › Re: Android
  • Data: 2011-02-10 01:08:13
    Temat: Re: Android
    Od: Jacek Radzikowski <j...@s...die.die.die.piranet.org> szukaj wiadomości tego autora
    [ pokaż wszystkie nagłówki ]

    On 02/09/2011 01:59 PM, Lelek@ wrote:

    No to chyba się wyjasniło

    > public void dupa() {
    > byte buf[] = new byte[256];
    Tutaj buf jest referencją do twojej tablicy...

    > buf = FromEditText.getBytes("UTF-8");
    Ale tutaj już buf jest referencją do obiektu zwróconego przez
    FromEditText.getBytes(). Wskazanie do tablicy, która zaalokowałeś
    zostało stracone i przydzieloną pamięcią zajmie się przy najbliższej
    okazji garbage collector.
    Powyższy kod jest równoważny takiej linijce:

    byte buf[] = FromEditText.getBytes("UTF-8");

    Ja bym twój kod przepisał do takiej postaci:

    byte buf[] = FromEditText.getBytes("UTF-8");
    int bfx[] = nil;
    if(buf.length>0)
    {
    bfx[] = new int[buf.length];
    for (i = 0; i < buf.length; i++)
    {
    //elementy buf mają po 8 bitów, więc maskowanie 0xff
    //jest trochę bez sensu
    bfx[i] = ((int)buf[i] & 0xFF);
    }
    }

    if(bfx!=nil)
    {
    //robimy cos z bfx
    }

    Bardzo ważne jest alokowanie pamięci na bfx po odczytaniu zawartości
    buf. Przy alokowaniu bfx o stałej długości, dopóki FromEditText.getBytes
    zwróci tablicę mniej niż 256 bajtów, program będzie działał poprawnie.
    Ale jeśli buf będzie dłuższe niż długość bfx, program wywali się z
    błędem dostępu do pamięci przy próbie zapisu pierwszego elementu, który
    się nie mieści w bfx.


    BTW. próbowałeś przechwytywać wyjątki?

    pzdr.
    j.

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: