Saltar al contenido

Desbordamiento de pila C++

Esta inquietud se puede solucionar de variadas formas, pero nosotros te enseñamos la que para nosotros es la respuesta más completa.

Solución:

Este:

int image[W*H];
float dtr[W*H];

Crea cada uno 4 * 1000 * 1000 ~ 4 MB array en la pila. El espacio de pila es limitado y, por lo general, es inferior a 4 MB. No haga eso, cree las matrices en el montón usando new.

int *image = new int[W*H];
float *dtr = new float[W*H];

Su pila probablemente no sea lo suficientemente grande para contener un millón de entradas y un millón de flotantes (8 MB). Entonces, tan pronto como intente acceder más allá del tamaño de su pila, su sistema operativo le arrojará un error. Los objetos o matrices por encima de un cierto tamaño deben asignarse en el montón, preferiblemente utilizando una clase de verificación de límites automáticos autogestionada como std::vector – el tamaño específico depende de su implementación.

Además del desbordamiento de la pila, tiene otro problema, uno que está enmascarado por sus definiciones de W y H.

for(int i=0;i

Su ciclo i debe contar de 0 a H-1, en lugar de W-1 (y el ciclo j también debe intercambiarse). De lo contrario, su código solo funcionará correctamente si W==H. Si WH sobrepasará sus búferes.

Este mismo problema también existe en otra parte de su ejemplo de código.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *