Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/163.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如果数组索引超出范围(C+;+;),尝试抛出范围错误_C++_Arrays_C++11_Pointers_Exception - Fatal编程技术网

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);}