Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 新分配的堆内存的初始内容(VS2010)_C++_Multithreading_Visual C++ - Fatal编程技术网

C++ 新分配的堆内存的初始内容(VS2010)

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];

下面是一个简单的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];
  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;icout堆上新分配的空间的内容未定义,因为它不会由标准类型的运算符new初始化。
该值转换为十六进制的0xCDCDCD,我猜出于某种原因,整个堆区域都填充了这种模式

更多详情:

  • 在堆上分配两个类型为size\u t的数组 typedef对于unsigned int,opreator new只会在堆上分配空间(就像malloc一样), 但不会调用任何构造函数或以任何方式初始化内存
  • 分配的数组被分配给size\u t类型的指针,该指针将指向 到数组的第一个元素
  • cout语句正在打印指针指向的内存内容(因为指针被取消引用),其中包含以前存储在那里的内容

可能我认为这是一个错误的想法是不正确的。你认为这是一个错误的想法是正确的。这是MSVC运行时中堆分配器调试版本的默认行为-它使用
0xCD
填充新分配的堆内存,内部称为
\u bcleansemply
-请参见.Btw,您显示的代码片段根本不使用TBB,因此您的问题标题具有误导性。因为您清楚地知道您正在打印未初始化内存的内容,所以我不理解您的问题。您是否期望某个特定值?不!我对两个OCASION的相同值感到惊讶,并且我认为某个库中的TBB值过高我不知道有什么新的接线员。谢谢你。