Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: DarkSun812 en 22 Marzo 2022, 21:28 pm



Título: Aumento de la memoria del Heap por desbordamiento. C++ Qt5
Publicado por: DarkSun812 en 22 Marzo 2022, 21:28 pm
     Muy buenas a todos, amigos. Hoy vengo con una nueva duda sobre c++ y es sobre la memoria del HEAP. Como ya sabran, existe la memoria de stack (local) y la memoria del heap (no se como describirla, solo se que se utiliza para no consumir la memoria local). Estoy haciendo una aplicacion en la que declaro 4 arrays de 1 dimension (vectores) y les estoy asignando un espacio en la memoria de 1.500.000 porque cada arreglo debe tener 1 millon y medio de elementos y hasta mas que luego se llenaran dentro de una funcion.
Código
  1.    float coordenadasx[cantidad];
  2.    float coordenadasy[cantidad];
  3.    float coordenadasz[cantidad];
  4.    float coordenadasi[cantidad];
  5.  

     la variable cantidad es una variable que contiene una funcion que lee un archivo y me retorna la cantidad de lineas que posee para luego establecer el tamaño de los arreglos y llenarlos en otra funcion. Cuando hago la depuracion o ejecuto la aplicacion me salta un erro que dice:
Código
  1. The inferior stopped because it received a signal from the operating system.
  2. Signal name:      SIGSEGV
  3. Signal meaning:  Segmentation fault
  4.  

     Yo manipulando la funcion puedo hacer que retorne mas o menos elementos, haciendo pruebas descubri que el maximo de elementos que me ha dejado integrar es de 1.200.000, cuando subo de ahi me suelta el error.

     Alguien sabe como aumentar la memoria del Heap?? O una manera de que este error no me salte, porque estaba leyendo y vi que QT5 tenia una especie de bloqueo cuando veia que a una variable se le asignaba mucha memoria, pero no se si se trate de eso.


Título: Re: Aumento de la memoria del Heap por desbordamiento. C++ Qt5
Publicado por: Eternal Idol en 22 Marzo 2022, 21:31 pm
No estas usando memoria del heap, para eso tendrias que reservarla (usando new/malloc por ejemplo). Si esas variables son locales a una funcion/metodo estaran en la pila y de otra manera en alguna sección de datos del ejecutable.



Título: Re: Aumento de la memoria del Heap por desbordamiento. C++ Qt5
Publicado por: DarkSun812 en 23 Marzo 2022, 15:12 pm
     Ya he solucionado el problema utilizando la libreria <vector>.
     A la hora de guardar los datos, en vez de declarar 4 arrays, declaro 4 vectores de la siguiente manera:
Código
  1. vector<float> coordenadax;
  2. vector<float> coordenaday;
  3. vector<float> coordenadaz;
  4. vector<float> coordenadai;
  5.  
     De esta manera al llenarlos dentro de la funcion, me permitio superar los 2 millones de datos.