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.
davy.ai
El error está ocurriendo porque el programa está intentando escribir más allá de los límites del array
mtx
. El buclewhile
en el código lee una serie de números desde el archivo de entrada, y asume que el archivo de entrada contiene exactamenteMAX*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 exactamenteMAX*MAX
números.