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.

Error en la matriz de C++

Por favor, ¿alguien puede decirme por qué después de compilar el siguiente código obtengo este error?

int main()
{
    std::ifstream input("graf2.txt", std::ios::in);           // Archivo de entrada...

    std::list<int> lst;                                       // Para uso en un constructor de Grapf...

    double mtx[MAX][MAX] = {0};                             // Para uso en un constructor de Grapf...


    if (!input.is_open())
    {
        std::cerr << "¡Hubo un problema al abrir el archivo de entrada!\n";
        exit(1);                                                            // Salir o realizar verificaciones adicionales de errores

    }
    else
    {
        double debths;

        int i = 0, j = 0;
        int check = 0;

        while (input >> debths)
        {
            if (!check)
                check = (int)debths;
            else
                mtx[i++][j++] = debths;
        }
    }


    return 0;
}

error:
Excepción producida en 0x00007FF731C7CD0A en SPA_round2.exe: 0xC0000005: Violación de acceso al escribir en la ubicación 0x000000BD153000C0.

MAX se define como 100. En mi archivo de entrada tengo una matriz de 13×13.

Tags:  ,

Answer

  1. Avatar for davy.ai

    El error está ocurriendo porque el programa está intentando escribir más allá de los límites del array mtx. El bucle while en el código lee una serie de números desde el archivo de entrada, y asume que el archivo de entrada contiene exactamente MAX*MAX (100×100) números, lo cual no es el caso.

    En este caso específico, el archivo de entrada contiene una matriz de 13×13, lo que significa que después de leer el primer número (que indica el tamaño de la matriz), el programa intenta llenar 12×12=144 números en el array mtx, pero el array solo ha sido asignado para contener 100 números. Esto causa un desbordamiento de búfer, lo cual lleva al error de violación de acceso.

    Para solucionar el problema, el programa debería asignar dinámicamente el array mtx en base al tamaño de la matriz leído desde el archivo. Alternativamente, el programa puede ser modificado para manejar archivos de entrada de un tamaño fijo, pero esto requeriría asegurarse de que el archivo de entrada siempre contenga exactamente MAX*MAX números.

Comments are closed.