使用gcc编译代码后,不会输出std :: out_of_range异常字符串

巴士底狱77

我正在尝试测试以下异常处理代码:

#include "Array_Template.h"
using namespace std;

int main()
{
    Array<int> intArr1;
    //attempt to use out-of-range subscript
    try{
        cout << "\nAttempt to assign 1000 to intArr1[6]" << endl;
        intArr1[6] = 1000;
    } //end try
    catch (const out_of_range &ex){
        cout << "An exception occurred: " << ex.what() << endl;
    } //end catch
    return 0;
} //end main

在我的Array类模板中:

#ifndef ARRAY_H
#define ARRAY_H

#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <stdexcept>

//forward declarations of friend functions as specializations of template
template<typename T> class Array;

template<typename T>
std::istream &operator>>(std::istream &, Array<T> &);
template<typename T>
std::ostream &operator<<(std::ostream &, const Array<T> &);

//Array class template
template<typename T>
class Array
{
    friend std::istream &operator>> <>(std::istream &, Array<T> &);
    friend std::ostream &operator<< <>(std::ostream &, const Array<T> &);
public:
    Array(int = 5); //default constructor of array size 5
    Array(const Array<T> &); //copy constructor
    ~Array(); //destructor
    int getSize() const; //return size of array
    const Array<T> &operator=(const Array<T> &); //overloaded assignment operator
    bool operator==(const Array<T> &) const; //overloaded equality operator
    bool operator!=(const Array<T> &r) const //overloaded inequality operator, inline definition
    {
        return !(*this == r); //invokes Array<T>::operator==
    }
    T &operator[](int); //overloaded subscript operator for non-const objects
    T operator[](int) const; //overloaded subscript for const objects
private:
    int size; //pointer-based array size
    T *arrPtr; //pointer to first element of array
}; //end class Array

template<typename T>
Array<T>::Array(int s)
    :size(s > 0 ? s : 5), arrPtr(new T[size])
{
    for (int i = 0; i < size; ++i)
        arrPtr[i] = 0;
} //end Array constructor

template<typename T>
//ref return creates a modifiable lvalue
T& Array<T>::operator[](int index)
{
    if (index < 0 || index >= size) //check if out of bounds
        throw std::out_of_range::out_of_range("index out of range");
    return arrPtr[index]; //ref return
} //end operator[]

template<typename T>
//const ref return creates an rvalue
T Array<T>::operator[](int index) const
{
    if (index < 0 || index >= size) //check if out of bounds
        throw std::out_of_range::out_of_range("index out of range");
    return arrPtr[index]; //returns copy of this element
} //end operator[]

#endif

该程序在Visual Studio中编译并执行良好,显示正确的单行错误消息: 超出范围错误消息

但是,当我用gcc编译相同的程序并运行它时,我得到以下输出:

*`./arrays_template'中的错误:free():无效大小:0x0000000001426030 * =======回溯:========= /lib64/libc.so.6(+0x7364f)[0x7fd7c2e3d64f ] /lib64/libc.so.6(+0x78eae)[0x7fd7c2e42eae] /lib64/libc.so.6(+0x79b87)[0x7fd7c2e43b87] ./arrays_template[0x4011a1] ./arrays_template[0x400fc7] .lib64 / lib。 6(__ libc_start_main + 0xf5)[0x7fd7c2debbe5] ./arrays_template[0x400c29]

接下来是一个较长的内存映射跟踪。有人可以解释这里到底发生了什么以及如何解决吗?通过修复,我的意思是我如何才能像catch块中指定的一样打印相同的错误消息。

莫希特·贾恩(Mohit Jain)

下面的代码是错误的:

throw std::out_of_range::out_of_range("index out of range");
//       ^^^^^^^^^^^^^^

它应该改写为:

throw std::out_of_range("index out of range");

要调用构造函数std::out_of_range


还要确保修改的返回类型operator[](int) const

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用gcc编译代码后,不会输出std :: out_of_range异常字符串

来自分类Dev

不会引发std :: out_of_range异常

来自分类Dev

不会引发std :: out_of_range异常

来自分类Dev

异常'out_of_range'不是std的成员?

来自分类Dev

Microsoft C ++异常:std :: out_of_range错误?

来自分类Dev

字符串输出异常

来自分类Dev

以类型为std :: out_of_range的未捕获异常终止终止错误

来自分类Dev

C ++:未处理的异常:内存位置处的std :: out_of_range

来自分类Dev

引发std :: out_of_range异常。“预期的类型说明符”

来自分类Dev

C++ 合并排序实现中抛出的 std::out_of_range 异常

来自分类Dev

设置QLineEdit时std :: out_of_range

来自分类Dev

C ++向量:std :: out_of_range错误

来自分类Dev

比较二进制数字输入的字符时,抛出'std :: out_of_range实例后调用终止

来自分类Dev

抛出'std :: out_of_range'实例后调用终止

来自分类Dev

抛出'std :: out_of_range'实例后调用终止

来自分类Dev

libc ++ abi.dylib:以类型为std :: out_of_range的未捕获异常终止:basic_string错误吗?

来自分类Dev

合并排序算法中的 C++“以未捕获的 std::out_of_range 类型异常终止:向量”错误

来自分类Dev

std :: stoi,std :: setbase和std :: out_of_range错误

来自分类Dev

在JSON字符串中使用HTML代码引发异常

来自分类Dev

C ++ std :: out_of_range在内存位置

来自分类Dev

C ++中带有矢量的'std :: out_of_range'实例

来自分类Dev

抛出'std :: out_of_range'what():vector :: _ M_range_check实例后终止调用

来自分类Dev

字符串和std.file的异常行为

来自分类Dev

更改字符串后获取“致命异常:main”

来自分类Dev

在C ++中抛出'std :: out_of_range'实例后调用终止

来自分类Dev

使用Google OAuth登录时的字符串格式异常

来自分类Dev

如何使用EditText避免“空字符串异常”

来自分类Dev

libc ++矢量和字符串编译简单代码的异常规范实例化时出错

来自分类Dev

错误test.exe中0x76C9FD62的未处理异常:Microsoft C ++异常:内存位置0x006FF870的std :: out_of_range。发生了

Related 相关文章

  1. 1

    使用gcc编译代码后,不会输出std :: out_of_range异常字符串

  2. 2

    不会引发std :: out_of_range异常

  3. 3

    不会引发std :: out_of_range异常

  4. 4

    异常'out_of_range'不是std的成员?

  5. 5

    Microsoft C ++异常:std :: out_of_range错误?

  6. 6

    字符串输出异常

  7. 7

    以类型为std :: out_of_range的未捕获异常终止终止错误

  8. 8

    C ++:未处理的异常:内存位置处的std :: out_of_range

  9. 9

    引发std :: out_of_range异常。“预期的类型说明符”

  10. 10

    C++ 合并排序实现中抛出的 std::out_of_range 异常

  11. 11

    设置QLineEdit时std :: out_of_range

  12. 12

    C ++向量:std :: out_of_range错误

  13. 13

    比较二进制数字输入的字符时,抛出'std :: out_of_range实例后调用终止

  14. 14

    抛出'std :: out_of_range'实例后调用终止

  15. 15

    抛出'std :: out_of_range'实例后调用终止

  16. 16

    libc ++ abi.dylib:以类型为std :: out_of_range的未捕获异常终止:basic_string错误吗?

  17. 17

    合并排序算法中的 C++“以未捕获的 std::out_of_range 类型异常终止:向量”错误

  18. 18

    std :: stoi,std :: setbase和std :: out_of_range错误

  19. 19

    在JSON字符串中使用HTML代码引发异常

  20. 20

    C ++ std :: out_of_range在内存位置

  21. 21

    C ++中带有矢量的'std :: out_of_range'实例

  22. 22

    抛出'std :: out_of_range'what():vector :: _ M_range_check实例后终止调用

  23. 23

    字符串和std.file的异常行为

  24. 24

    更改字符串后获取“致命异常:main”

  25. 25

    在C ++中抛出'std :: out_of_range'实例后调用终止

  26. 26

    使用Google OAuth登录时的字符串格式异常

  27. 27

    如何使用EditText避免“空字符串异常”

  28. 28

    libc ++矢量和字符串编译简单代码的异常规范实例化时出错

  29. 29

    错误test.exe中0x76C9FD62的未处理异常:Microsoft C ++异常:内存位置0x006FF870的std :: out_of_range。发生了

热门标签

归档