Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

Need help please I am using xcode and having issues with my program. Just to cla

ID: 3706301 • Letter: N

Question

Need help please I am using xcode and having issues with my program. Just to clarify i need to have the destructor in the IntArray class I already know it can run fine without it but the book is requiring it. I will upload the code i have. When i try to compile it, the program runs until it gets to test 6 after that i get a error with the destructor.
//main.cpp #include <iostream>    #include <iomanip>    #include <fstream>    #include <stdlib.h>    #include "iadrv.h" #include "intarray.h"    using namespace std;    ofstream csis;    int main() {    csis.open("csis.txt");    test1();    test2();    test3();    test4();    test5();    test6();    test7();    test8();    test9();    test10();    test11();    test12();    test13();    test14();    test15();    test16();    test17();    test18();    test19();    test20();    csis.close();    }    void test1() {    cout << "1. Array declared with single integer: IntArray a(10);" << endl << endl; csis << "1. Array declared with single integer: IntArray a(10);" << endl << endl; IntArray a(10); for(int i = a.low(); i <= a.high(); i++) a[i] = i * 10; a.setName(" a"); cout << a << endl; csis << a << endl; wait();    }    void test2() {    cout << "2. Array declared with two integers: IntArray b(-3, 6);" << endl << endl;    csis << "2. Array declared with two integers: IntArray b(-3, 6);" << endl << endl;    IntArray b(-3, 6);    for(int i = b.low(); i <= b.high(); i++)    b[i] = i * 10;    b.setName(" b");    cout << b << endl;    csis << b << endl;    wait();    }    void test3() {    cout << "3. Array declared with two integers: IntArray c(6, 8);" << endl << endl;    csis << "3. Array declared with two integers: IntArray c(6, 8);" << endl << endl;    IntArray c(6, 8);    for(int i = c.low(); i <= c.high(); i++)    c[i] = i * 10;    c.setName(" c");    cout << c << endl;    csis << c << endl;    wait();    }    void test4() {    cout << "4. Array declared with two identical integers: IntArray d(5, 5);" << endl << endl;    csis << "4. Array declared with two identical integers: IntArray d(5, 5);" << endl << endl;    IntArray d(5, 5);    for(int i = d.low(); i <= d.high(); i++)    d[i] = i * 10;    d.setName(" d");    cout << d << endl;    csis << d << endl;    wait();    }    void test5() {    cout << "5. Array declared with no integers: IntArray z;" << endl << endl;    csis << "5. Array declared with no integers: IntArray z;" << endl << endl;    IntArray z;    for(int i = z.low(); i <= z.high(); i++)    z[i] = i * 10;    z.setName(" z");    cout << z << endl;    csis << z << endl;    wait();    }    void test6() {    cout << "6. Array declared with another object of type IntArray: IntArray c(6, 8);" << endl;    cout << " Intarray e(c);" << endl << endl;    csis << "6. Array declared with another object of type IntArray: IntArray c(6, 8);" << endl;    csis << " Intarray e(c);" << endl << endl;    IntArray c(6, 8);    for(int i = c.low(); i <= c.high(); i++)    c[i] = i * 10;    c.setName(" c");    cout << c << endl;    csis << c << endl;    IntArray e(c);    e.setName(" e");    cout << e << endl;    csis << e << endl;    wait();    }    void test7() {    cout << "7. Array assigned to another array w/ different indices: IntArray f(1, 4);" << endl;    cout << " IntArray g(5, 8);" << endl;    cout << " f = g;" << endl << endl;    csis << "7. Array assigned to another array w/ different indices: IntArray f(1, 4);" << endl;    csis << " IntArray g(5, 8);" << endl;    csis << " f = g;" << endl << endl;    IntArray f(1, 4);    for(int i = f.low(); i <= f.high(); i++)    f[i] = i * 10;    f.setName(" f");    cout << f << endl;    csis << f << endl;    IntArray g(5, 8);    for(int i = g.low(); i <= g.high(); i++)    g[i] = i * 10;    g.setName(" g");    cout << g << endl;    csis << g << endl;    wait();    f = g;    cout << f << endl;    cout << g << endl;    csis << f << endl;    csis << g << endl;    wait();    }    void test8() {    cout << "8. Multiple array assignment with different indices: IntArray j(3, 6);" << endl;    cout << " IntArray k(6, 9);" << endl;    cout << " IntArray l(1, 4);" << endl;    cout << " j = k = l;" << endl << endl;    csis << "8. Multiple array assignment with different indices: IntArray j(3, 6);" << endl;    csis << " IntArray k(6, 9);" << endl;    csis << " IntArray l(1, 4);" << endl;    csis << " j = k = l;" << endl << endl;    IntArray j(3, 6);    for(int i = j.low(); i <= j.high(); i++)    j[i] = i * 10;    j.setName(" j");    cout << j << endl;    csis << j << endl;    IntArray k(6, 9);    for(int i = k.low(); i <= k.high(); i++)    k[i] = i * 10;    k.setName(" k");    cout << k << endl;    csis << k << endl;    IntArray l(1, 4);    for(int i = l.low(); i <= l.high(); i++)    l[i] = i * 10;    l.setName(" l");    cout << l << endl;    csis << l << endl;    wait();    j = k = l;    cout << j << endl;    cout << k << endl;    cout << l << endl;    csis << j << endl;    csis << k << endl;    csis << l << endl;    wait();    }    void test9() {    cout << "9. Overloaded equality operator (identical elements): IntArray m(3, 7);" << endl;    cout << " IntArray n(1, 5);" << endl;    cout << " m == n" << endl << endl;    csis << "9. Overloaded equality operator (identical elements): IntArray m(3, 7);" << endl;    csis << " IntArray n(1, 5);" << endl;    csis << " m == n" << endl << endl;    IntArray m(3, 7);    for(int i = m.low(); i <= m.high(); i++)    m[i] = i * 10;    m.setName(" m");    cout << m << endl;    csis << m << endl;    IntArray n(1, 5);    for(int i = n.low(); i <= n.high(); i++)    n[i] = i * 10;    n.setName(" n");    cout << n << endl;    csis << n << endl;    wait();    m = n;    cout << m << endl;    cout << n << endl;    cout << "Returns " << (m == n ? "True." : "False.") << endl << endl;    csis << m << endl;    csis << n << endl;    csis << "Returns " << (m == n ? "True." : "False.") << endl << endl;    wait();    }    void test10() {    cout << "10. Overloaded equality operator (different elements): IntArray o(3, 7);" << endl;    cout << " IntArray p(1, 5);" << endl;    cout << " o == p" << endl << endl;    csis << "10. Overloaded equality operator (different elements): IntArray o(3, 7);" << endl;    csis << " IntArray p(1, 5);" << endl;    csis << " o == p" << endl << endl;    IntArray o(3, 7);    for(int i = o.low(); i <= o.high(); i++)    o[i] = i * 10;    o.setName(" o");    cout << o << endl;    csis << o << endl;    IntArray p(1, 5);    for(int i = p.low(); i <= p.high(); i++)    p[i] = i * 10;    p.setName(" p");    cout << p << endl;    cout << "Returns " << (o == p ? "True." : "False.") << endl << endl;    csis << p << endl;    csis << "Returns " << (o == p ? "True." : "False.") << endl << endl;    wait();    }    void test11() {    cout << "11. Overloaded equality operator (different size arrays): IntArray q(1, 3);" << endl;    cout << " IntArray r(1, 4);" << endl;    cout << " q == r;" << endl << endl;    csis << "11. Overloaded equality operator (different size arrays): IntArray q(1, 3);" << endl;    csis << " IntArray r(1, 4);" << endl;    csis << " q == r;" << endl << endl;    IntArray q(1, 3);    for(int i = q.low(); i <= q.high(); i++)    q[i] = i * 10;    q.setName("q");    cout << q << endl;    csis << q << endl;    IntArray r(1, 4);    for(int i = r.low(); i <= r.high(); i++)    r[i] = i * 10;    r.setName(" r");    cout << r << endl;    cout << "Returns " << (q == r ? "True." : "False.") << endl << endl;    csis << r << endl;    csis << "Returns " << (q == r ? "True." : "False.") << endl << endl;    wait();    }    void test12() {    cout << "12. Overloaded inequality operator (identical elements): IntArray s(3, 7);" << endl;    cout << " IntArray t(1, 5);" << endl;    cout << " s != t;" << endl << endl;    csis << "12. Overloaded inequality operator (identical elements): IntArray s(3, 7);" << endl;    csis << " IntArray t(1, 5);" << endl;    csis << " s != t;" << endl << endl;    IntArray s(3, 7);    for(int i = s.low(); i <= s.high(); i++)    s[i] = i * 10;    s.setName("s");    cout << s << endl;    csis << s << endl;    IntArray t(1, 5);    for(int i = t.low(); i <= t.high(); i++)    t[i] = i * 10;    t.setName(" t");    cout << t << endl;    csis << t << endl;    wait();    s = t;    cout << s << endl;    cout << t << endl;    cout << "Returns " << (s != t ? "True." : "False.") << endl << endl;    csis << s << endl;    csis << t << endl;    csis << "Returns " << (s != t ? "True." : "False.") << endl << endl;    wait();    }    void test13() {    cout << "13. Overloaded inequality operator (different elements): IntArray u(3, 7);" << endl;    cout << " IntArray v(1, 5);" << endl;    cout << " u != v;" << endl << endl;    csis << "13. Overloaded inequality operator (different elements): IntArray u(3, 7);" << endl;    csis << " IntArray v(1, 5);" << endl;    csis << " u != v;" << endl << endl;    IntArray u(3, 7);    for(int i = u.low(); i <= u.high(); i++)    u[i] = i * 10;    u.setName(" u");    cout << u << endl;    csis << u << endl;    IntArray v(1, 5);    for(int i = v.low(); i <= v.high(); i++)    v[i] = i * 10;    v.setName(" v");    cout << v << endl;    cout << "Returns " << (u != v ? "True." : "False.") << endl << endl;    csis << v << endl;    csis << "Returns " << (u != v ? "True." : "False.") << endl << endl;    wait();    }    void test14() {    cout << "14. Overloaded inequality operator (different size arrays): IntArray w(1, 3);" << endl;    cout << " IntArray x(1, 4);" << endl;    cout << " w != x;" << endl << endl;    csis << "14. Overloaded inequality operator (different size arrays): IntArray w(1, 3);" << endl;    csis << " IntArray x(1, 4);" << endl;    csis << " w != x;" << endl << endl;    IntArray w(1, 3);    for(int i = w.low(); i <= w.high(); i++)    w[i] = i * 10;    w.setName(" w");    cout << w << endl;    csis << w << endl;    IntArray x(1, 4);    for(int i = x.low(); i <= x.high(); i++)    x[i] = i * 10;    x.setName(" x");    cout << x << endl;    cout << "Returns " << (w != x ? "True." : "False.") << endl << endl;    csis << x << endl;    csis << "Returns " << (w != x ? "True." : "False.") << endl << endl;    wait();    }    void test15() {    cout << "15. Sum of two arrays assigned to third array: IntArray a(1, 5);" << endl;    cout << " IntArray b(4, 8);" << endl;    cout << " IntArray c = a + b;" << endl << endl;    csis << "15. Sum of two arrays assigned to third array: IntArray a(1, 5);" << endl;    csis << " IntArray b(4, 8);" << endl;    csis << " IntArray c = a + b;" << endl << endl;    IntArray a(1, 5);    for(int i = a.low(); i <= a.high(); i++)    a[i] = i * 10;    a.setName(" a");    cout << a << endl;    csis << a << endl;    IntArray b(4, 8);    for(int i = b.low(); i <= b.high(); i++)    b[i] = i * 10;    b.setName(" b");    cout << b << endl;    csis << b << endl;    wait();    IntArray c = a + b;    c.setName(" c");    cout << c << endl;    csis << c << endl;    wait();    }    void test16() {    cout << "16. Sum of two arrays assigned to first array: IntArray d(10, 13);" << endl;    cout << " IntArray e(30, 33);" << endl;    cout << " d += e;" << endl << endl;    csis << "16. Sum of two arrays assigned to first array: IntArray d(10, 13);" << endl;    csis << " IntArray e(30, 33);" << endl;    csis << " d += e;" << endl << endl;    IntArray d(10, 13);    for(int i = d.low(); i <= d.high(); i++)    d[i] = i * 10;    d.setName(" d");    cout << d << endl;    csis << d << endl;    IntArray e(30, 33);    for(int i = e.low(); i <= e.high(); i++)    e[i] = i * 10;    e.setName(" e");    cout << e << endl;    csis << e << endl;    d += e;    cout << d << endl;    csis << d << endl;    wait();    }    void test17() {    cout << "17. Array declared with illegal array bounds: IntArray f(5, 2);" << endl << endl;    csis << "17. Array declared with illegal array bounds: IntArray f(5, 2);" << endl << endl;    IntArray f(5, 2);    for(int i = f.low(); i <= f.high(); i++)    f[i] = i * 10;    f.setName(" f");    cout << f << endl;    csis << f << endl;    wait();    }    void test18() {    cout << "18. Array with index out of range: IntArray g(10);" << endl;    cout << " g[10] = 1;" << endl << endl;    csis << "18. Array with index out of range: IntArray g(10);" << endl;    csis << " g[10] = 1;" << endl << endl;    IntArray g(10);    for(int i = g.low(); i <= g.high(); i++)    g[i] = i * 10;    g.setName(" g");    cout << g << endl;    csis << g << endl;    g[10] = 1;    wait();    }    void test19() {    cout << "19. Arrays with length mismatch: IntArray m(1, 4);" << endl;    cout << " IntArray n(2, 4);" << endl;    cout << " m = n;" << endl << endl;    csis << "19. Arrays with length mismatch: IntArray m(1, 4);" << endl;    csis << " IntArray n(2, 4);" << endl;    csis << " m = n;" << endl << endl;    IntArray m(1, 4);    for(int i = m.low(); i <= m.high(); i++)    m[i] = i * 10;    m.setName(" m");    cout << m << endl;    csis << m << endl;    IntArray n(2, 4);    for(int i = n.low(); i <= n.high(); i++)    n[i] = i * 10;    n.setName(" n");    cout << n << endl;    csis << n << endl;    wait();    m = n;    cout << m << endl;    cout << n << endl;    csis << m << endl;    csis << n << endl;    wait();    }    void test20() {    cout << "20. Array subscript operator: IntArray o(7, 8);" << endl;    cout << " o[7] = 25;" << endl;    cout << " o[8] = o[7];" << endl << endl;    csis << "20. Array subscript operator: IntArray o(7, 8);" << endl;    csis << " o[7] = 25;" << endl;    csis << " o[8] = o[7];" << endl << endl;    IntArray o(7, 8);    for(int i = o.low(); i <= o.high(); i++)    o[i] = i * 10;    o.setName(" o");    cout << o << endl;    csis << o << endl;    o[7] = 25;    o[8] = o[7];    cout << o << endl;    csis << o << endl;    wait();    }    void wait() {    char buf;    cout << "Press any key to continue." << endl;    cin.get(buf);    } ————————————————————-------------------------------------------------------------------------------------------- #ifndef iadrv_h #define iadrv_h
#include "intarray.h"
int main(); void test1(); void test2(); void test3(); void test4(); void test5(); void test6(); void test7(); void test8(); void test9(); void test10(); void test11(); void test12(); void test13(); void test14(); void test15(); void test16(); void test17(); void test18(); void test19(); void test20(); void wait();

#endif /* iadrv_h */ ———————————————————---------------------------------------------------------- #ifndef intarray_h #define intarray_h
#include <iostream> #include <fstream> using namespace std;
class IntArray { private: string arrayName; int lowIndice; //low indice int highIndice; //high indice int elements; //number of elements int size; //size int *dArray; //dynamic array public: //constructors IntArray(); IntArray(int); IntArray(int, int);    //destructor having issues when compiling wont do it completely /* ~IntArray() { delete dArray; } */ //set methods void setName(string);    //get methods string getName(); //returns name int low(); //returns lowIndice int high(); //returns high indice    //operator overloading friend ostream& operator << (ostream&, IntArray&); int& operator[](int); //subscript IntArray operator+(IntArray&); //additon IntArray operator+=(IntArray&); IntArray& operator=(IntArray&); //asignment bool operator==(IntArray&); //comparsion bool operator!=(IntArray&); //comparsion };

#endif /* intarray_h */ ——————————————————----------------------------------------------------- //#include "IntArray.hpp" #include <iostream> #include <string> #include <cstdlib> #include <fstream>
#include "intarray.h"
using namespace std; extern ofstream csis;
IntArray::IntArray() { size = 9;    operator[](9); dArray = new int[size];    lowIndice = 0; highIndice = 9;    elements = size + 1; }
IntArray::IntArray(int b) { size = b-1;    operator[](b-1); dArray = new int[size];    lowIndice = 0; highIndice = b - 1;    elements = b; }
IntArray::IntArray(int a, int b) { size = b;    dArray = new int[size];    lowIndice = a; highIndice = b;    elements = highIndice - lowIndice + 1;    if (a > b) { cout << "Run-time Error: Illegal Array Bounds." << endl; cout << "Diagonstic: 1st indice cannot be bigger than 2nd indice" << endl; csis << "Run-time Error: Illgeal array bounds. " << endl; csis << "Diagonstic: 1st indice cannot be bigger than 2nd indice" << endl; } }
void IntArray::setName(string name){ arrayName = name; }
string IntArray::getName(){ return arrayName; }
int IntArray::low() {; return lowIndice; }
int IntArray::high() { return highIndice; }
ostream& operator<<(ostream& os, IntArray& a) { //displays the array object for (int i = a.low(); i <= a.high(); i++) os << a.getName() << "[" << i << "] = " << a.dArray[i] << " "; return os; }
int& IntArray::operator[](int k){ //if the index of the array is bigger than the size of the array. error will be shown. if (k > size) { cout << "Run-time Error: Illegal Index." << endl; cout << "Dignostic: Index cannot be bigger than size" << endl; csis << "Run-time Error: Illgeal Indez." << endl; csis << "Dignostic: Index cannot be bigger than size" << endl; } return dArray[k]; }
IntArray& IntArray::operator=(IntArray& b){ //if elements do not match up, they cannot be assigned to each other. error will be shown. if (elements != b.elements) { cout << "Runtime error: Length mismatch" << endl; cout << "Diagnostic: Unable to assign, lengths do not match up." << endl; csis << "Run-time Error: Length mismatch." << endl; csis <<"Dignostic: Unable to assign lengths do not match up" << endl; }    return *this; }

IntArray IntArray::operator+(IntArray& b) { //object is copied to temp object with its indices. then temp object is added with b object to produce c object. IntArray temp; IntArray c;    c.lowIndice = lowIndice; c.highIndice = highIndice;    for (int i = lowIndice, k = b.lowIndice; k <= b.highIndice; i++, k++) { temp.dArray[i] = b.dArray[k]; }    for (int i = lowIndice; i <= highIndice; i++) { c.dArray[i] = dArray[i] + temp.dArray[i]; }    return c; }
IntArray IntArray::operator+=(IntArray& letter){ //letter object is copied to temp object with its indices. then temp object is added to this object. IntArray temp;    for (int i = lowIndice, k = letter.lowIndice; k <= letter.highIndice; i++, k++) { temp.dArray[i] = letter.dArray[k]; }    for (int i = lowIndice; i <= highIndice; i++) { dArray[i] = dArray[i] + temp.dArray[i]; }    return *this; }
bool IntArray::operator==(IntArray& letter){ if (elements == letter.elements) { return 1; //return true } else { return 0; // return false }    if (size == letter.size) { return 1; // return false } else { return 0; // return true } }
bool IntArray::operator!=(IntArray& letter){ if (elements == letter.elements) { return 0; // return false } else { return 1; // return true }    if (size == letter.size) { return 0; // return false } else { return 1; // return true } }
Below is the error code i get
practiceintarray (7799,8x1003a7380) malloc:error for object 0x18068c760: pointer being freed was not allocated set a breakpoint in malloc error break to debug (11db) Program ended with exit code: 9 All Output C DO Book Air F7 F9 F10 F11 0 0

Explanation / Answer

try

~IntArray(){

if (darray != NULL)

{

delete[] darray;

}

}

You didn't initialize the member (darray) with NULL. That means the pointer member starts with a random (garbage) value and when the destructor function is called it will attempt to free the garbage (invalid) address. And that is why your program crashes.

Also, free the (darray) only when it is not NULL. Freeing a zero address also causes undefined behavior.

Hire Me For All Your Tutoring Needs
Integrity-first tutoring: clear explanations, guidance, and feedback.
Drop an Email at
drjack9650@gmail.com
Chat Now And Get Quote