es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

El programa C++ se bloqueó después de leer el archivo ppm fila por fila.

Estoy escribiendo un programa para leer de un archivo .ppm y almacenar sus valores. Este código que escribí funcionó, pero se bloquea justo antes de cerrar el archivo. ¿Alguien puede ayudarme a encontrar cómo solucionar esto?

    string EndHeader, Red, Green, Blue;

    for(int i=0; i<4; i++)
    {
        readFile >> EndHeader;
        //cout << EndHeader << endl;
    }


    for (int i = 0; i < width * height; i++)
    {
        readFile >> Red;
        r[i]->R = stoi(Red);
        readFile >> Green;
        r[i]->G = stoi(Green);
        readFile >> Blue;
        r[i]->B = stoi(Blue);
        //cout << r[i]->R << " " << r[i]->G << " " << r[i]->B << endl;
    }


    readFile.close();

El “r” proviene de esta parte del programa:

struct Pixel
{
unsigned int R, G, B;
};

class Image
{
private:

char magicNum1, magicNum2;
unsigned int width, height, maxValue;
Pixel **r;

void alloc_raster()
{
r = new Pixel*[height]; // asignar punteros a las filas
for (unsigned int k = 0; k < height; k++) // para todas las filas
{
r[k] = new Pixel[width]; // asignar píxeles en la fila
}

}

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Parece que el código que proporcionaste está faltando algunos detalles importantes, como cómo se define e inicializa el objeto “readFile” y cuáles son los valores de “width” y “height”. Sin esta información, podría ser difícil identificar la fuente del problema.

    Sin embargo, según el código proporcionado, una posible razón para el fallo podría ser debido a un problema con la asignación o desasignación de memoria. En particular, la función “alloc_raster” en la clase Image asigna memoria dinámicamente para la matriz r, pero no hay una función correspondiente para desasignar esta memoria cuando el programa termina. Esto puede provocar fugas de memoria y otros problemas, especialmente si el programa se ejecuta varias veces.

    Para solucionar esto, podrías agregar una función de destructor a la clase Image que desasigne correctamente la memoria. Por ejemplo:

    c++
    ~Image()
    {
    for (unsigned int k = 0; k < height; k++)
    {
    delete[] r[k]; // desasignar cada fila
    }
    delete[] r; // desasignar punteros a filas
    }

    Esto asegurará que la memoria asignada por “alloc_raster” se limpie correctamente cuando el programa termine, incluso si hay errores o excepciones en el camino.

    Por supuesto, este puede no ser el único problema con tu código, pero es un buen punto de partida. Si proporcionas más información sobre el mensaje de error específico o los síntomas que estás viendo, podría ser más fácil diagnosticar el problema. ¡Buena suerte!

Comments are closed.