如何计算使用 malloc 和 new 动态分配内存的所有指针和变量?

1 c++ pointers memory-leaks reference-counting dynamic-memory-allocation

如果我们重写 malloc 和 new 函数,我们可以跟踪第一个创建的指针。但是我如何跟踪和计算使用此分配的内存的其他指针和函数?(下面代码中的q指针)我应该覆盖赋值运算符和函数调用吗?如果是的话怎么办?如果解决方案是对类、构造函数和析构函数使用引用计数,我必须将所有普通指针定义​​更改为类类型?我不想更改源代码,只想包含一个库并计算指向已分配内存的指针。

\n
int \xe2\x88\x97 p = (int\xe2\x88\x97)malloc(10 \xe2\x88\x97 sizeof (int));  \nint * q= p;  \n
Run Code Online (Sandbox Code Playgroud)\n

Sam*_*hik 6

从根本上讲,C++ 根本不是这样工作的。指针就是指针,就是内存地址。没有任何与之相关的其他包袱可以用来以某种形式或方式对其进行监视。指向类的指针可以转换为指向其子类之一的指针,反之亦然。您现在得到一个完全不同的指针。原始指针可能不再存在,但其他相关指针仍然可以保留。

指向数组的指针可能会对其执行一些数学运算,从而产生不同的指针,然后经过更多数学运算后,原始指针会返回。

一个奇怪的 C++ 程序可能会将原始指针写入文件,然后删除该指针,它不再存在,然后一段时间后将其读回,就这样,同一个指针又回来了,并且仍然可以使用它,非常,格式良好,而且仍然有效。

一旦被重写的malloc指针移交了新创建的指针,它就不再受其控制,并且在free获得它之前对其发生的情况没有进一步的发言权。希望它是相同的指针,一切都会好起来的。

这就是 C++ 指针的工作原理。他们无法控制,也无法管理。像 Java、C# 或 Perl 这样的高级编程语言,会跟踪并管理它们的所有指针,这必须内置到编程语言本身的核心中,而 C++ 则不然。C++ 不是 Java、C# 或任何其他语言。在 C++ 中,程序有责任跟踪它们并正确使用它们。C++ 不会为你做这些事。