Buona sera a tutti, oggi mi sono imbattuto nel seguente esercizio:
"Un programma contiene il seguente codice per creare un array dinamico: int* entrata = new int [10]; Se non esiste sufficiente memoria nell'eap, la chiamata che precede new fallirà. Scrivere un codice che verifichi questa eventualità e visualizzi un apposito messaggio di errore."
Qui vi è il mio codice
#include <iostream>
using namespace std;
void overflow()
{
cout << "La memoria e' piena";
exit (1);
}
int main()
{
int i;
set_new_handler (overflow);
for (i = 0; ; i++)
{
int* entrata = new int[10];
cout << "Allocazione memoria: " << i << "byte" << endl;
}
}
Mentre questo è un esempio che ci ha dato il professore
#include <iostream>
using namespace std;
int main()
{
int* entrata;
for (int i=0; ; i++) // ciclo infinito
{
entrata = new int[5];
if (entrata == NULL)
{
cout << " memoria esaurita \n"; break;
}
cout << " assegnati " << i*10 << " KBytes \n";
}
return 0;
}
La cosa che non capisco è, perché entrambi i programmi vanno all'infinito? Prendendo come esempio il primo codice, perché il ciclo for continua senza fermarsi occupando sempre byte. Navigando su internet ho letto che dipende dal tipo di compilatore usato, quindi come faccio a capire se un programma va in overflow? Grazie in anticipo