繁体   English   中英

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

[英]how to count all pointers and variables that using an dynamically allocated memory with malloc and new?

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

int ∗ p = (int∗)malloc(10 ∗ sizeof (int));  
int * q= p;  

从根本上说,C++ 根本无法以这种方式工作。 指针是指针,是内存地址。 没有与它相关的其他行李,可以用来以某种形式或方式密切关注它。 指向类的指针可以转换为指向其子类之一的指针,反之亦然。 你现在得到一个完全不同的指针。 原始指针可能不再存在,但其他相关指针仍可保留。

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

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

一旦被覆盖的malloc交出一个新生成的指针,它就不再受其控制,并且无法进一步说明它会发生什么,直到free得到它。 希望它是同一个指针,一切都会好起来的。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM