std :: atomic <std :: string>:Visual Studio 2013(VC12)中的访问冲突写入位置0xFEEEEFEEE - 使用std :: atomic <int>时不会发生

时间:2015-11-27 12:36:05

标签: multithreading c++11 stdatomic

以下在调试模式下为x64编译并在Visual Studio 2013调试器中运行的最小代码示例产生

  

...处的未处理异常:访问违规写入位置   0xFEEEFEEE。

调试时,我发现访问冲突发生在&#34;返回0;&#34;言。

(当从没有调试器的控制台运行时,错误读取&#34;指令在0x ...引用内存在0xddddddd ...内存无法写入。&#34;)。

#include <atomic>
#include <string>

int main()
{
  std::atomic<std::string> a1("127.0.0.1:41001");
  std::string ep1_1 = a1.load();
  std::string ep1_2 = a1.load();
  return 0;
}

1 个答案:

答案 0 :(得分:2)

std::atomic<std::string>在标准C ++中不合法,因为std::string并非易于复制。遗憾的是,没有要求编译器拒绝此代码,但也没有要求(也没有可能)它也能正常工作。

另请参阅:Does std::atomic<std::string> work appropriately?