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.

¿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(2,3)=5; // está bien, pero ¿por qué el programa no me da un error de violación de segmento cuando intento acceder a un número mayor que WIDTH (10 aquí), como img.at(2,10)=5?;

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;
}

Tags:  , , ,

Answer

  1. Avatar for 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.

Comments are closed.