C++ 如果数组索引超出范围(C+;+;),尝试抛出范围错误
如果我的函数正在访问的数组索引超出范围,我试图让我的程序抛出一个C++ 如果数组索引超出范围(C+;+;),尝试抛出范围错误,c++,arrays,c++11,pointers,exception,C++,Arrays,C++11,Pointers,Exception,如果我的函数正在访问的数组索引超出范围,我试图让我的程序抛出一个std::range\u错误。传入的类型是size\t,因为堆栈中的内存位置可能是有符号的,也可能是无符号的 以下是我尝试过的: MyClass::MyClass(){//default constr 尺寸=10; ptr=新的整数[大小]; } int MyClass::at(大小位置)常量 { 尝试 { 返回ptr[pos]; } 捕获(常数标准::范围错误&) { cout您的类应该随时知道数组的大小。您可以立即知道传递的值
std::range\u错误。传入的类型是size\t
,因为堆栈中的内存位置可能是有符号的,也可能是无符号的
以下是我尝试过的:
MyClass::MyClass(){//default constr
尺寸=10;
ptr=新的整数[大小];
}
int MyClass::at(大小位置)常量
{
尝试
{
返回ptr[pos];
}
捕获(常数标准::范围错误&)
{
cout您的类应该随时知道数组的大小。您可以立即知道传递的值是否超出范围,然后抛出
您的try
无法工作。运算符[]()
不会抛出。它的功能是作为一个简单的内存偏移量
您的函数应该更像这样:
int MyClass::at(大小位置)常量
{
如果(位置>=this->m_size)抛出std::out_超出范围(“传递给at()的错误idx”);
返回ptr[位置];
}
您的类应该随时知道数组的大小。您可以立即知道传递的值是否超出范围,然后抛出
您的try
无法工作。运算符[]()
不会抛出。它的功能是作为一个简单的内存偏移量
您的函数应该更像这样:
int MyClass::at(大小位置)常量
{
如果(位置>=this->m_size)抛出std::out_超出范围(“传递给at()的错误idx”);
返回ptr[位置];
}
您正在捕获一个异常,您应该检查其有效性并将其抛出。java堆栈溢出组已结束--->这是今天早些时候提出的问题。这是否回答了您的问题?调用未定义的行为不是触发超出范围异常的方式。除了std::range\u error
之外出于此目的(它是针对可能违反某些域限制的值错误,例如标准库中只有两个位置可以抛出此值:字符串转换),您的代码应该验证位置
是否在[0…size)
如果检测到不在范围内,抛出一个std::out_of_range
异常(这正是针对这种情况的)。您可以将类更改为使用std::vector
吗?如果是,那么您可以简单地使用vector::at()
,例如:MyClass::MyClass():vec(10){}int MyClass::at(size\t位置)常量{return vec.at(pos);}
您正在捕获一个异常,您应该检查其有效性并将其抛出。java堆栈溢出组已结束--->这是今天早些时候提出的问题。这是否回答了您的问题?调用未定义的行为不是触发超出范围异常的方式。除了std::range\u error
之外出于此目的(它是针对可能违反某些域限制的值错误,例如标准库中只有两个位置可以抛出此值:字符串转换),您的代码应该验证位置
是否在[0…size)
如果检测到不在范围内,抛出一个std::out_of_range
异常(这正是针对这种情况的)。您可以将类更改为使用std::vector
吗?如果是,那么您可以简单地使用vector::at()
,例如:MyClass::MyClass():vec(10){}int MyClass::at(size\t位置)常量{return vec.at(pos);}