In questo modo è corretto che dia l'asserzione. Il compilatore che non lo fa, sbaglia.
Una volta che scrivi
pChar = (char*)pDouble;
perdi il valore precedente di pChar (quello ottenuto con la new).
In questo modo la memoria allocata per pChar non risulta più deallocabile.
In più, cosa più grave, essendo diventato pChar una copia di pDouble, viene deallocato due volte e la seconda, ovviamente, scatta l'errore.
Devi preservare i valori dei puntatori quando fai questi esperimenti, scrivendo ad esempio
char pTmp = pChar;
prima di scrivere
pChar = (char*)pDouble;
e poi scrivendo
pChar = pTmp;
poco prima della prima delete.
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità. |