Ignora me, sono un idiota.
Mark sottolinea che MyObject op
è un'istanza di ambito locale di una classe, che verrà posizionata sullo stack. Ciò significa che &op
è in realtà l'indirizzo dei dati della classe in memoria.
Come tale, non ho idea del motivo per cui questo è stato contrassegnato. Falso positivo, forse?
È giusto lamentarsi, quindi diamo un'occhiata a questo codice. Che cosa fa?
MyObject op;
Nella riga 1, definisci una variabile oggetto. Tuttavia, non si chiama il suo costruttore, quindi questa variabile oggetto non è effettivamente impostata su qualcosa - al momento è solo un puntatore non inizializzato.
memset(&op, 0, sizeof(MyObject));
Nella riga 2, prendi l'indirizzo della variabile ed esegui un memset
a quell'indirizzo con una dimensione che sarà quasi certamente più grande della dimensione di un puntatore. Prestare attenzione a non non che sovrascrive la memoria che conterrà i dati dell'oggetto, ma piuttosto lo spazio di archiviazione locale dell'ambito utilizzato per contenere un puntatore all'oggetto. Questa è sicuramente una condizione di overflow.