检查内存是否已初始化

时间:2010-11-08 20:09:12

标签: c++ memory-management

如果我通过:: operator new(nbytes)分配了一些内存,后来我通过“new(where)what”在这个池中构造了一些相应类型的objs的数字(但小于nbytes),有办法检查未初始化的内存从哪里开始?

示例

struct T{};
short noOfObj = 10;
T* p = static_cast<T*>(::operator new(sizeof(T) * noOfObj));
for (short i = 0; i < (noOfObj - 2); ++i)//here I'm constructing two less obj than available mem
{
new (p + i) T();
}

我如何检查(不知道noOfObj已经减少多少)p指向的未初始化内存开始? (觉得我再次搞砸了语法,但我担心我现在能做的最好)

2 个答案:

答案 0 :(得分:5)

唯一的方法是跟踪放置new d的对象的大小,并自己维护指向未使用部分的指针。系统无法向您提供该信息。

答案 1 :(得分:3)

哇......好吧,试图通过这个问题进行战斗......

看起来你正在做自己的内存管理...比如请求大量的字符来获取程序控制下的大块内存然后使用它来初始化你自己的变量,但你想要知道你给变量以及什么仍然是免费的。

除非您跟踪已分配的内存和未分配的内存,或跟踪分配到此内存池中的每个对象,否则不会。就操作系统而言,它为你提供了巨大的内存块(或者你使用的基本类型)。