2010-11-08 106 views
0

如果通过:: operator new(nbytes)分配了一定数量的内存,并且稍后我通过“new(where)”构造了“某个数字(但小于nbytes)适当类型的objs,有没有办法检查未初始化的内存在哪里启动?检查内存是否已初始化

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已经decresed)用p开始指出其中未初始化的内存? (感觉像我再次搞砸了语法,但恐怕我现在能做的最好)

+1

你可以尝试将这个问题构造成一些语法吗?我的(外国)解析器失败了。 – sbi 2010-11-08 20:14:57

+0

@sbi;)我会尽力去做 – 2010-11-08 20:15:47

+0

@sbi矿缺乏基本的功能,比如关心开始。 – thecoshman 2010-11-08 20:21:55

回答

3

哇......好了,试图通过这个问题来战斗......

好像你是这样做你自己的内存管理...比如请求一个巨大的字符数组得到一个大的在程序控制下的内存块,然后使用它来初始化你自己的变量,但是你想知道你给变量和什么仍然是免费的。除非你跟踪你已经分配了什么内存以及没有分配什么内存,或者跟踪了你分配给这个内存池的每个对象,否则不会。就操作系统而言,它给了你巨大的内存空间(或者你使用的基本类型)。

5

唯一的方法是跟踪你放置的物体的尺寸newd并保持一个指向你自己未使用部分的指针。系统无法为您提供该信息。

相关问题