Ignorame, soy un idiota.
Mark señala que MyObject op
es una creación de instancias de alcance local de una clase, que se colocará en la pila. Esto significa que &op
es en realidad la dirección de los datos de clase en la memoria.
Como tal, no tengo idea de por qué se marcó esto. Falso positivo, tal vez?
Es correcto quejarse, así que echemos un vistazo a este código. ¿Qué hace?
MyObject op;
En la línea 1, define una variable de objeto. Sin embargo, no llama a su constructor, por lo que esta variable de objeto no está configurada para nada, en este momento solo es un puntero sin inicializar.
memset(&op, 0, sizeof(MyObject));
En la línea 2, toma la dirección de la variable y realiza un memset
en esa dirección con un tamaño que seguramente será más grande que el tamaño del puntero. Tenga en cuenta que no está sobrescribiendo la memoria que contendrá los datos del objeto, sino el espacio de almacenamiento de alcance local que se utiliza para mantener un puntero al objeto. Esta es definitivamente una condición de desbordamiento.