Pogledajte određenu poruku
Staro 21. 12. 2010.   #16
misko_
profesionalac
Qualified
 
Datum učlanjenja: 22.09.2007
Lokacija: Split
Poruke: 111
Hvala: 8
39 "Hvala" u 10 poruka
misko_ is on a distinguished road
Default

Citat:
Originalno napisao jablan Pogledajte poruku
Međutim, uvek možeš da "napipaš" vrednost polovljenjem intervala, pošto malloc vraća NULL ako ne uspe da alocira zadatu veličinu.
Da malloc možda i da, ali new C++ operator ne radi tako.
I to me zbunjuje jer i mnogim knjiga piše da je.
Evo što sam otkrio.

Prvo kod kompajiram sa g++ na RHEL sa:
[sasa@localhost my_code]$ g++ test.cpp -g -o test && ./test

Napisao sam sljedeći code:
Kôd:
#include <iostream>

int main(int argc, char *argv[])
{
    double * array;
    array = NULL;
    printf("PRVI ALLOC\n");

    array = new double[1000000000];

    if( NULL == array )
    {
        printf("Nije uspio alocirati.\n");
    }
}
Program se uredno komapjlira, ali kada ga pokrenemo dobijem ovo
Kôd:
[sasa@localhost my_code]$ g++ test.cpp -g -o test && ./test
PRVI ALLOC
terminate called after throwing an instance of 'std::bad_alloc'
  what():  St9bad_alloc
Aborted
Iz ovoga zakljucujem da se ovako treba raditi provjera alocirane memorije u C++.
Kôd:
#include <iostream>
int main(int argc, char *argv[])
{
    double * array;
    array = NULL;
    printf("PRVI ALLOC\n");

    try
    {
        array = new double[1000000000];
    }
    catch( std::bad_alloc )
    {
        printf("array ALOCIRANJE NIJE USPIJELO\n");
        exit( -5 );
    }
    catch(...)
    {
        printf("NESTO NIJE USPIJELO\n");
    }
}
Kada ovaj kode pokrenem i kompajliram, dobijem:
Kôd:
[sasa@localhost my_code]$ g++ test.cpp -g -o test && ./test
PRVI ALLOC
array ALOCIRANJE NIJE USPIJELO
U dosta knjiga će se naći da se nakon new treba sa if( NULL == p ) prvojeriti da li je memorija stvarno alocirana.
Iz ovoga moga eksperimenta je jasno da je to koncept koji više ne funkcionira.

Mene sada zanima, od kada se to izmjenilo?
I ako netko ima još kakvih dodatnih informacija može ih iznjeti u vezi ove tematike.
misko_ je offline   Odgovorite uz citat