0
下面是一個簡單的VC++程序的片段,它正在Visual Studio 10上運行,並帶有線程構建模塊(開源4.1)支持。新分配的堆內存(VS2010)的初始內容
我從例子中編譯並運行了一個程序,並且很驚訝地看到來自cout的新運算符的輸出。
int main() {
string str[N] = { string("a"), string("b") };
for (size_t i = 2; i < N; ++i) str[i] = str[i-1]+str[i-2];
string &to_scan = str[N-1];
size_t num_elem = to_scan.size();
size_t *max = new size_t[num_elem];
size_t *pos = new size_t[num_elem];
cout <<"*max : " << *max<< ", "<<"*pos :"<<*pos<<endl;
......
......
的COUT輸出就像下面一個:
*最大:3452816845,* POS:3452816845
令我驚訝的是max和在兩種情況下POS相同的值。
這可能是由於庫中新操作符的重載造成的?
或
這是一個需要報告的錯誤嗎?
或
這只是巧合嗎?
可能我認爲這是一個錯誤是不正確的 –
你認爲你的想法是錯誤的錯誤是正確的。這是MSVC運行時堆分配器的調試版本的默認行爲 - 它用'0xCD'填充新分配的堆內存,在內部稱爲_bCleanLandFill - 見[here](http://zeroflag.wordpress。 COM/2007/05/03 /魔法值-ON-THE-MSVCRT調試堆/)。順便說一句,你顯示的代碼片段根本不使用TBB,所以你的問題的標題是誤導性的。 –
既然你明確知道你正在打印未初始化內存的內容,我不明白你的問題。你是否期望一些特殊的價值? – jthill