ale*_*lex 0 multithreading c++11 stdatomic
以下最小代码示例在 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;
}
Run Code Online (Sandbox Code Playgroud)
std::atomic<std::string>在标准 C++ 中不合法,因为std::string不可简单复制。不幸的是,没有要求编译器拒绝此代码,但也没有要求(也不可能)它能够正常工作。
另请参阅:std::atomic<std::string> 是否正常工作?