2010-11-08 104 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並保持一個指向你自己未使用部分的指針。系統無法爲您提供該信息。

相關問題