【发布时间】:2020-05-25 07:53:44
【问题描述】:
我不是说要在生产环境中使用这段代码,只是有点迷茫。我认为它一定是未定义的,但是,我运行这段代码没有崩溃。这只是巧合吗?
#include <array>
#include <string>
auto main(int argc, char** argv) -> int {
// for (int i = 0; i < 1000; ++i) {
std::array<char, 1000> dst;
std::string src = "hello world";
memcpy(dst.data(), src.c_str(), dst.size()); // is this undefined behavior?
// }
}
【问题讨论】:
-
未定义的行为并不意味着“保证崩溃”
-
@StoryTeller-UnslanderMonica 所以我问了
Is this just conincidence? -
这是未定义的行为,未定义的行为可能意味着崩溃失败。我不确定我是否会将这种情况描述为巧合。它只是常规的未定义行为。
-
仅供参考 未定义行为可能导致时间旅行stackoverflow.com/questions/24527401/…
-
只是巧合吗? 这个问题通常无法回答。这可能是巧合,也可能不是。至少需要研究生成的程序集。在装配级别,可能不会发生任何违法行为。