运行失败(exit value -1.073.740.940)

RUN FAILED (exit value -1.073.740.940 )

本文关键字:value 失败 exit 运行      更新时间:2023-10-16

我是c++和netbeans的新手,这里有一个相当大的问题,我不能把我的手指放在错误可能是什么。构建总是成功的,但我得到一个RUN FAILED(退出值-1.073.740.940,总时间:2s)错误,当运行我的程序。我的代码:

Arraylist.hpp:

#include <iostream>
namespace hfu {
class Arraylist {
private:
    double* members;
    int size;
public:
    Arraylist(int);
    ~Arraylist();
    Arraylist(const Arraylist&);
    double get(int) const;
    void set(int, double);
    Arraylist& operator=(const Arraylist&);
    //float operator[](int);
    friend std::ostream& operator<<(std::ostream&, const Arraylist&);
};
}

Arraylist.cpp:

#include "Arraylist.hpp"
#include <exception>

namespace hfu {
Arraylist::Arraylist(int i) : size(i), members(new double[size]) {
    for (int i = 0; i < size; i++) {
        set(i, 0);
    }
}
Arraylist::~Arraylist() {
    delete members;
}
Arraylist::Arraylist(const Arraylist& other) : size(other.size), members(new double[other.size]) {
    for (int i = 0; i < 5; i++) {
        set(i, other.get(i));
    }
}
double Arraylist::get(int i) const {
    if (i < 0 || i >= size) {
        throw (std::exception());
    } else {
        return members[i];
    }
}
void Arraylist::set(int i, double value) {
    if (i < 0 || i >= size) {
        throw (std::exception());
    } else {
        members[i] = value;
    }
}
Arraylist& Arraylist::operator=(const Arraylist& other) {
    size = other.size;
    for (int i = 0; i < size; i++) {
        set(i, other.get(i));
    }
    return *this;
}
//    float Arraylist::operator [](int index) {
//        return members[index];
//   }
std::ostream& operator<<(std::ostream& os, const Arraylist& list) {
    for (int i = 0; i < list.size; i++) {
        os << "[" << list.get(i) << "]";
    }
    return os;
}

}

main.cpp:

#include "Arraylist.hpp"
int main() {
try {
    auto a1 = hfu::Arraylist(10);
    std::cout << a1 << std::endl;
    auto a2 = hfu::Arraylist(10);
    std::cout << a2 << std::endl;
    auto a3 = hfu::Arraylist(10);
    std::cout << a3 << std::endl;
}
catch (std::exception& e) {
    std::cout << e.what() << std::endl;
}
}  

我可以创建2个Arraylist....对象但没有更多,它将打印前两个,然后失败....但是当我创建更短的列表时,比如3个大小为1的列表……它会起作用的……所以我认为这可能与记忆有关……但我很茫然。想法吗?

非常感谢!

btw:我使用netbeans 8.2和mingw++ 6.1.0

成员变量的初始化顺序由它们在类中的定义的顺序来定义,而不是由它们在初始化列表中的顺序来定义。事实上,你的编译器应该给你"hfu::Arraylist::size将在"之后初始化"警告。

因此,在您的情况下,memberssize之前初始化,因此当size仍然是垃圾时调用new double[size]。在我的例子中,它只是导致std::bad_array_new_length被抛出。在您的情况下,事情变得更糟,您的应用程序崩溃了。

所以解决方案是改变

class Arraylist {
private:
    double* members;
    int size;

class Arraylist {
private:
    int size;
    double* members;