Ver Mensaje Individual
  #2 (permalink)  
Antiguo 13/03/2015, 14:47
Avatar de Profesor_Falken
Profesor_Falken
 
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 9 años, 8 meses
Puntos: 182
Respuesta: Respuesta inesperada en asignación de memoria

Buenas,

Te propongo una pequeña modificación en tu código que te ayudará a entender que es lo que estás haciendo/entendiendo mal:

Código C++:
Ver original
  1. #include <iostream>
  2. #include <new>
  3. using namespace std;
  4.  
  5. int main ()
  6. {
  7.     long long int n = 0;
  8.     long long int * p;
  9.  
  10.     while(p != 0)
  11.  
  12. // Utilizo zero por que no me gusta modificar el compilador para que                    //agarren los null y nullptr
  13.  
  14.     {
  15.  
  16. //nothrow evita que new se rompa al toparse con la memoria maxia y no poder asignar //mas, en lugar de eso, regresa un puntero nulo o... a mi humilde entendimiento 0.
  17.  
  18.         p= new (nothrow) long long int[n];
  19.         n++;
  20.     }
  21.  
  22.     cout << endl << "-----------------------" << endl;
  23.  
  24. //Hemos reservado memoria para n arrays long long int, cada uno con n+1 elementos
  25.     long totalSize = 0;
  26.     for (int i = 1; i<n; i++) {
  27.         totalSize += n;
  28.     }
  29.  
  30.     cout << "Real number of allocated long long int: " << totalSize << endl;
  31.  
  32.  
  33.     delete[] p;
  34.  
  35.     return 0;
  36. }


En mi modestísimo equipo me devuelve 533794816, que son unos dos gigas. Nada mal.


Un saludo
__________________
If to err is human, then programmers are the most human of us

Última edición por Profesor_Falken; 13/03/2015 a las 14:53