簡體   English   中英

RUN FAILED(退出值-1.073.740.940)

[英]RUN FAILED (exit value -1.073.740.940 )

我對c ++和netbeans還是很陌生,在這里遇到了很大的問題,我不能專心於可能出現的錯誤。 編譯總是成功的,但是在運行程序時出現“運行失敗”(退出值-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;
}

}  

我可以創建Arraylist的2個對象....但不能更多,它將打印前兩個對象,然后失敗.....但是當我創建較短的列表時,說3個只有大小為1的列表...將可以工作...所以我想可能是有記憶的東西...但是我很茫然。 想法?

非常感謝!

順便說一句:我正在使用netbeans 8.2和mingw g ++ 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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM