【问题标题】:how to count all pointers and variables that using an dynamically allocated memory with malloc and new?如何计算所有使用 malloc 和 new 动态分配内存的指针和变量?
【发布时间】:2022-06-28 20:34:42
【问题描述】:
如果我们重写 malloc 和 new 函数,我们可以跟踪第一个创建的指针。但是我怎样才能跟踪和计算使用这个分配的内存的其他指针和函数呢? (下面代码中的 q 指针)我应该覆盖赋值运算符和函数调用吗?如果是的话怎么办?如果解决方案是对类和构造函数和析构函数使用引用计数,我必须将所有普通指针定义更改为类类型?我不想更改源代码,只想包含一个库并计算指向分配内存的指针。
int ∗ p = (int∗)malloc(10 ∗ sizeof (int));
int * q= p;
【问题讨论】:
标签:
c++
pointers
memory-leaks
dynamic-memory-allocation
reference-counting
【解决方案1】:
从根本上说,C++ 根本无法以这种方式工作。指针是指针,是内存地址。没有与它相关的其他行李,可以用来以某种形式或方式密切关注它。指向类的指针可以转换为指向其子类之一的指针,反之亦然。你现在得到一个完全不同的指针。原始指针可能不再存在,但其他相关指针仍可保留。
指向数组的指针可能会对其执行一些数学运算,从而产生不同的指针,然后经过更多数学运算后原始指针会返回。
一个奇怪的 C++ 程序可能会将原始指针写入一个文件,然后删除这个指针,它不再存在,然后过一段时间再读回它,你就有了,同样的指针又回来了,并使用它仍然,非常,格式良好,并且仍然有效。
一旦被覆盖的malloc 交出一个新生成的指针,它就不再受其控制,并且在free 得到它之前没有进一步的发言权。希望它是同一个指针,一切都会好起来的。
这就是 C++ 指针的工作原理。它们是不可控的,程序有责任跟踪它们并正确使用它们。 C++ 不会为你做这些。