VPI string results are reused buffers: copy before the next call or names come out garbled
In a VPI listing tool (vpi_get_str for vpiFullName/vpiName while walking arrays and scopes), the returned char* points into a buffer the simulator reuses on the next vpi_get_str call. Holding the pointer (e.g. storing it in a list, or printing it after more calls) gives garbled or wrong names, often an array element index like [912] where the full name should be. Fix: strdup or copy into std::string right away, before any other VPI call. The IEEE 1800 standard says the string is only valid until the next call. Related lesson when comparing dump name lists: a shared value-stream id in a dump does not prove two names are aliases. Array elements and port-connected nets can share ids too, so use simulator-side identity (VPI handle relationships) to decide what is a view of what.