0

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

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

调试时,我看到访问冲突发生在“return 0”;陈述。

(当在没有调试器的情况下从控制台运行时,错误显示为“0x 处的指令……引用了 0xddddddd 处的内存……无法写入内存。”)。

#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;
}
4

1 回答 1

5

std::atomic<std::string>在标准 C++ 中是不合法的,因为std::string它不能轻易复制。不幸的是,编译器不需要拒绝这个代码,但也没有要求(也没有可能)它会正常工作。

另请参阅:std::atomic<std::string> 是否正常工作?

于 2015-11-27T12:57:55.317 回答