C++ 新分配的堆内存的初始内容(VS2010)
下面是一个简单的VC++程序的片段,该程序在VisualStudio10上运行,支持线程构建块(开源4.1) 我根据示例编译并运行了一个程序,并惊讶地看到cout中新操作符的输出C++ 新分配的堆内存的初始内容(VS2010),c++,multithreading,visual-c++,C++,Multithreading,Visual C++,下面是一个简单的VC++程序的片段,该程序在VisualStudio10上运行,支持线程构建块(开源4.1) 我根据示例编译并运行了一个程序,并惊讶地看到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];
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;
......
......
intmain(){
string str[N]={string(“a”),string(“b”)};
对于(大小i=2;i cout堆上新分配的空间的内容未定义,因为它不会由标准类型的运算符new初始化。
该值转换为十六进制的0xCDCDCD,我猜出于某种原因,整个堆区域都填充了这种模式
更多详情:
- 在堆上分配两个类型为size\u t的数组
typedef对于unsigned int,opreator new只会在堆上分配空间(就像malloc一样),
但不会调用任何构造函数或以任何方式初始化内存
- 分配的数组被分配给size\u t类型的指针,该指针将指向
到数组的第一个元素
- cout语句正在打印指针指向的内存内容(因为指针被取消引用),其中包含以前存储在那里的内容
可能我认为这是一个错误的想法是不正确的。你认为这是一个错误的想法是正确的。这是MSVC运行时中堆分配器调试版本的默认行为-它使用0xCD
填充新分配的堆内存,内部称为\u bcleansemply
-请参见.Btw,您显示的代码片段根本不使用TBB,因此您的问题标题具有误导性。因为您清楚地知道您正在打印未初始化内存的内容,所以我不理解您的问题。您是否期望某个特定值?不!我对两个OCASION的相同值感到惊讶,并且我认为某个库中的TBB值过高我不知道有什么新的接线员。谢谢你。