La chaîne "hey"
a son espace pré-alloué dans le cadre du programme, de sorte qu'il apparaît juste lorsque le programme démarre et disparaît à la fin du programme.
Si vous voulez voir un programme qui alloue de la mémoire, utilise, puis le supprime, puis regardez ceci:
#include <iostream>
using namespace std;
int main(int argc, char *argv[]){
const char *hey="hey";
char* tmp=new char[4]; // NB allocate 4 chars for "hey" plus a null terminator
strcpy(tmp,hey); // copies the string and null terminator
cout << tmp << endl;
delete [] tmp;
// must not use tmp now as it points to deallocated memory
// must not delete hey
return 0;
}
Remarquez comment je me trouvais supprimer le new
« d tmp
mémoire à l'aide. Je aurais pu faire ceci:
cout << tmp << endl;
hey = tmp;
delete [] hey;
Peu importe si, à la fin, nous soulignons la new
« d mémoire avec hey
ou tmp
, aussi longtemps que nous supprimons correctement pour éviter les fuites de mémoire.
Ce code est un bug. Vous ne pouvez pas supprimer un littéral. –
Je pense que le questionneur comprend beaucoup, Pavel. La question demande * pourquoi *. –