【发布时间】:2016-10-01 02:09:34
【问题描述】:
为什么允许以下行为?
#include <iostream>
#include <random>
int main()
{
std::random_device rd;
std::uniform_int_distribution<int> dist(2,3);
auto arr = new int[dist(rd)][4][2]{{{1}},{{2}},{{3}}}; // may write to unallocated memory
auto val1 = arr[0][0][0];
auto val2 = arr[1][0][0];
auto val3 = arr[2][0][0];
auto result = val1 + val2 + val3;
std::cout << result;
return 0;
}
如果随机值为 2,初始化器将覆盖未分配的内存。
与找到的答案 here 类似,我没想到编译器会允许这样做。
【问题讨论】:
标签: c++