Citat:
Originalno napisao jablan
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.