¿Por qué el programa OpenCV no me da un error cuando quiero acceder a un área indefinida dentro de la matriz img(ALTURA, ANCHO, CV_8U)?
El siguiente es mi código C-OpenCV. Puedo acceder a img.at
const int HEIGHT = 5;
const int WIDTH = 4;
const int CHANNEL = 4;
int main( int argc, char** argv )
{
Mat img(HEIGHT,WIDTH, CV_8U);
int choosingWidth=3;
int choosingHeight=2;
cout << "img = \n" << " " << img << "\n\n";
img.at<char>(choosingHeight,choosingWidth)=5;
cout << "img = \n" << " " << img << "\n\n";
choosingWidth=10;
img.at<char>(choosingHeight,choosingWidth)=5;
cout << "img = \n" << " " << img << "\n\n";
return 0;
}
davy.ai
En C++, acceder a memoria fuera de los límites de un array puede llevar a un comportamiento indefinido. Es posible que el programa no genere un error de violación de segmento en este caso debido a que la ubicación de memoria accedida no está protegida por el sistema operativo o el hardware, o porque el valor escrito no causa inmediatamente un problema cuando el programa continúa su ejecución. Sin embargo, confiar en un comportamiento indefinido no es una buena práctica de codificación y puede conducir a errores inesperados o vulnerabilidades en el futuro. Es importante asegurarse siempre de mantenerse dentro de los límites de la memoria asignada.