如果地址已知,如何获取指针变量的名称?

时间:2019-06-20 04:43:57

标签: c++ pointers dereference

当我运行我的项目时,它会加载并开始运行,但有时会崩溃。我得到的日志是这样的:

尝试释放无效的指针0x2df2fc6b9000

现在这是铬代码,我不知道该代码库在哪里出错。因此,我想知道是否有可能获得变量名称,并提供地址0x2df2fc6b9000。谢谢。

3 个答案:

答案 0 :(得分:2)

你不能。

例如:

int i = 10;
int* p1 = &i;
int* p2 = p1;

鉴于&i,没有办法说变量是p1p2。就我们所关心的而言,可能根本没有p1p2

该错误消息强烈表明您的代码未正确使用内存。您必须尝试将代码缩减为Minimal, Reproducible Example。您可能会在这样做的过程中找到问题的根源。

答案 1 :(得分:0)

除非您从程序中打印内存地址和变量名,否则无法分辨出什么变量存储在特定的内存中。

使用现代C ++,您可以使用智能指针:unique_ptr,shared_ptr和weak_ptr。他们使用RAII,因此会为您清除内存。

与其使用new和delete自己管理指针,不如尝试使用智能指针。

答案 2 :(得分:0)

如果在调试器中运行包含符号信息的程序的调试版本,则可能找到变量的名称。调试器可能在应用程序崩溃的程序点显示堆栈上具有适当地址的符号列表。在您的情况下,您将必须找到一个指针变量,其值包含在错误中。

调试器还应显示发生错误的行。通过查看围绕此行的代码,比按内容搜索有问题的变量可能更容易发现错误。

程序中没有符号信息,就不可能将存储位置与变量名匹配。