为什么允许以下内容?
#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]{ Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.os.Bundle android.content.Intent.getExtras()' on a null object reference
at com.example.sra.hellosrilanka.DBAccess.getQuotes(DBAccess.java:51)
at com.example.sra.hellosrilanka.ContactView.onCreate(ContactView.java:29)
,{{2}},here}; // 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,则初始化程序将写入未分配的内存。
与找到{{3}}的答案类似,我不希望编译器允许这样做。
答案 0 :(得分:2)
如果array-new表达式的初始化程序太多,则需要编译器生成类型bad_array_new_length
的异常抛出。
g ++ 6.1确实按预期发出了git-clone
的抛出; clang没有,但这是因为它能够消除分配(Clang fails to throw a std::bad_alloc when allocating objects that would exceed the limit)。如果强制进行分配,则clang会抛出异常但of the wrong type(bad_array_new_length
)。
std::bad_alloc