Der 'Name' ist im ausführbaren Programm ohne Debuginfos sowieso nicht mehr vorhanden
Du hast anscheinend noch einiges nicht vollständig oder sogar falsch verstanden.
- Variablen landen letztendlich alle im Arbeitsspeicher und jeder Bereich im Arbeitsspeicher ist adressierbar.
Wenn du eine Variable lokal in einer Funktion erzeugst dann hat sie trotzdem eine Position im Arbeitsspeicher und damit auch eine eigene Adresse. Eine per new auf dem Heap erzeugte Variable bekommt ebenfalls einen Speicherort auf dem Arbeitsspeicher und der Rückgabewert von new ist genau diese Adresse.
Wenn eine Funktion jetzt einen Pointer als Parameter übergeben bekommt dann ist es relativ egal, ob der Pointer auf den Heap oder eine lokale Variable der aufrufenden Funktion zeigt - es sind alles Adressen im Speicher und es gibt keinen Unterschied in der Handhabung.
Wenn man das ein bisschen weiter denkt ist auch klar, dass du einen kleinen Denkfehler im Bezug auf den Unterschied zwischen Heap und globalen Variablen hast. Jeder Pointer kann auf beide Typen von Variablen zeigen und somit bleibt es Aufgabe des Programmierers dafür zu sorgen, dass Pointer nur dahin zeigen wo sie hinzeigen sollen.
Nur wenn man (ausversehen) den Adressbereich verlässt, den Windows dem eigenen Programm zugeteilt hat wird ein Zugriff auf den Speicher evtl. verhindert, solange man im eigenen Programm bleibt kann man nahezu ungehindert den ganzen Speicher zermurksen indem man einen Pointer irgendwo hinzeigen lässt und dann damit arbeitet