How to fix segmentation fault for C++?












-1














I am getting a segmentation fault error when compiling my code. I don't know how to fix it. I am supposed to compile my Polynomial.cpp with my professor's poly_check.o, but I get a segmentation fault error.



This is my Polynomial.h:



#ifndef POLYNOMIAL_H
#define POLYNOMIAL_H

#include <iostream>
using namespace std;

class Polynomial {

private:
double *coefficients;
int size;

public:

Polynomial();
Polynomial(double c, int size);
Polynomial(const Polynomial &poly);

~Polynomial();

void set(double c, int size);

inline int getDegree() const {
return size - 1;
}

double f(double x)const;

bool operator== (const Polynomial &poly)const;
Polynomial operator+ (const Polynomial &poly)const;

friend ostream & operator << (ostream &out, const
Polynomial &poly);
friend istream & operator >> (istream &in, Polynomial
&poly);

};

#endif


This is my Polynomial.cpp:



#include "Polynomial.h"
#include <iostream>
#include <cmath>

using namespace std;

Polynomial::Polynomial() {
size = 0;
coefficients = NULL;
}

Polynomial::Polynomial(double c, int size) {

this->size = size;
coefficients = new double[size];

for (int i = 0; i < size; i++) {
coefficients[i] = c[i];
}
}

Polynomial::Polynomial(const Polynomial &poly) {

if (coefficients != NULL)
delete coefficients;

this->size = poly.size;
coefficients = new double[size];

for (int i = 0; i < size; i++)
coefficients[i] = poly.coefficients[i];
}

Polynomial::~Polynomial() {

if (coefficients != NULL)
delete coefficients;
}

void Polynomial::set(double c, int size) {

this->size = size;
if (coefficients != NULL)
delete coefficients;

coefficients = new double[size];

for (int i = 0; i < size; i++)
coefficients[i] = c[i];
}

double Polynomial::f(double x)const {

double value = 0.0;

for (int i = 0; i < size; i++) {
value += (coefficients[i] * pow(x, i));
}

return value;
}

bool Polynomial::operator== (const Polynomial &poly)const {

if (this->size != poly.size)
return false;

for (int i = 0; i < size; i++) {
if (poly.coefficients[i] != coefficients[i])
return false;
}

return true;
}


Polynomial Polynomial::operator+ (const Polynomial &poly)const {

int maxSize = size;
if (poly.size > maxSize)
maxSize = poly.size;

double sum[maxSize] = {0.0};

for (int i = 0; i < size; i++) {
sum[i] = coefficients[i];
}

for (int i = 0; i < poly.size; i++) {
sum[i] += poly.coefficients[i];
}

Polynomial sumP(sum, maxSize);
return sumP;
}

ostream &operator << (ostream &out, const Polynomial &poly) {

for (int i = poly.size - 1; i >= 0; i--) {

if (i != poly.size - 1) {
if (poly.coefficients[i] >= 0)
out << " + ";
else
out << " - ";
}
out << poly.coefficients[i];
if (i == 0)
continue;
if (i == 1)
out << "x";
else
out << "x^" << i;
}

return out;
}

istream &operator >> (istream &in, Polynomial &poly) {

int degree;
in >> degree;

double c[100];
int size = 0;


while (in >> c[size]) {
size++;
if ((size-1) == degree)
break;
}

poly.set(c, size);
return in;
}


This is my poly_test.cpp:



#include "Polynomial.h"
#include <iostream>
using namespace std;

int main(void) {

double c1 = {0, 1, 2, 3, 4};
double c2 = {0, 1, 2, 3, 4, 5, 6};

Polynomial p1(c1, 5);
Polynomial p2(c2, 7);

Polynomial p3;
cout << "Enter p3: ";
cin >> p3;

cout << "p1: ";
cout << p1 << endl;

cout << "p2: ";
cout << p2 << endl;

cout << "p3: ";
cout << p3 << endl;

Polynomial p4;
p4 = p1 + p2;
cout << "p4 = p1 + p2, p4: ";
cout << p4 << endl;

double value = p1.f(2);
cout << "Evaluating p1 at x = 2, p1 = ";
cout << value << endl;

Polynomial p6(c1, 5);
cout << "p6: ";
cout << p6 << endl;
if (p6 == p1) {
cout << "p6 and p1 are equal. Equality test passed" <<
endl;
}
else {
cout << "Equality test failed" << endl;
}

return 0;
}


This is the error that I am getting:
segmentation fault error










share|improve this question


















  • 2




    if (coefficients != NULL) delete coefficients; ??? In the constructor? In the destructor, OK, but here... Use a std::vector instead.
    – Matthieu Brucher
    Nov 20 at 22:59










  • I second that. An enormous amount of this code goes away if you only used std::vector<double> to store your coefficients. And that bug in the copy-ctor is pretty blatant.
    – WhozCraig
    Nov 20 at 23:06










  • Rule one. Never use using namespace xxx; in a header file. It just opens a can of problems. Rule 2: Don't include more than you need. Your header file just needs <iosfwd> (not <iostream>). Rule 3. If you allocate memory as an array, delete it as an array, delete coef....
    – Bo R
    Nov 20 at 23:17










  • @BoR Wait a sec. I thought Rule Three was if you have a copy constructor, assignment operator or destructor you probably need all three.
    – user4581301
    Nov 21 at 0:08










  • @user4581301 Sorry, just bad of me naming my rules like that.
    – Bo R
    Nov 21 at 14:21
















-1














I am getting a segmentation fault error when compiling my code. I don't know how to fix it. I am supposed to compile my Polynomial.cpp with my professor's poly_check.o, but I get a segmentation fault error.



This is my Polynomial.h:



#ifndef POLYNOMIAL_H
#define POLYNOMIAL_H

#include <iostream>
using namespace std;

class Polynomial {

private:
double *coefficients;
int size;

public:

Polynomial();
Polynomial(double c, int size);
Polynomial(const Polynomial &poly);

~Polynomial();

void set(double c, int size);

inline int getDegree() const {
return size - 1;
}

double f(double x)const;

bool operator== (const Polynomial &poly)const;
Polynomial operator+ (const Polynomial &poly)const;

friend ostream & operator << (ostream &out, const
Polynomial &poly);
friend istream & operator >> (istream &in, Polynomial
&poly);

};

#endif


This is my Polynomial.cpp:



#include "Polynomial.h"
#include <iostream>
#include <cmath>

using namespace std;

Polynomial::Polynomial() {
size = 0;
coefficients = NULL;
}

Polynomial::Polynomial(double c, int size) {

this->size = size;
coefficients = new double[size];

for (int i = 0; i < size; i++) {
coefficients[i] = c[i];
}
}

Polynomial::Polynomial(const Polynomial &poly) {

if (coefficients != NULL)
delete coefficients;

this->size = poly.size;
coefficients = new double[size];

for (int i = 0; i < size; i++)
coefficients[i] = poly.coefficients[i];
}

Polynomial::~Polynomial() {

if (coefficients != NULL)
delete coefficients;
}

void Polynomial::set(double c, int size) {

this->size = size;
if (coefficients != NULL)
delete coefficients;

coefficients = new double[size];

for (int i = 0; i < size; i++)
coefficients[i] = c[i];
}

double Polynomial::f(double x)const {

double value = 0.0;

for (int i = 0; i < size; i++) {
value += (coefficients[i] * pow(x, i));
}

return value;
}

bool Polynomial::operator== (const Polynomial &poly)const {

if (this->size != poly.size)
return false;

for (int i = 0; i < size; i++) {
if (poly.coefficients[i] != coefficients[i])
return false;
}

return true;
}


Polynomial Polynomial::operator+ (const Polynomial &poly)const {

int maxSize = size;
if (poly.size > maxSize)
maxSize = poly.size;

double sum[maxSize] = {0.0};

for (int i = 0; i < size; i++) {
sum[i] = coefficients[i];
}

for (int i = 0; i < poly.size; i++) {
sum[i] += poly.coefficients[i];
}

Polynomial sumP(sum, maxSize);
return sumP;
}

ostream &operator << (ostream &out, const Polynomial &poly) {

for (int i = poly.size - 1; i >= 0; i--) {

if (i != poly.size - 1) {
if (poly.coefficients[i] >= 0)
out << " + ";
else
out << " - ";
}
out << poly.coefficients[i];
if (i == 0)
continue;
if (i == 1)
out << "x";
else
out << "x^" << i;
}

return out;
}

istream &operator >> (istream &in, Polynomial &poly) {

int degree;
in >> degree;

double c[100];
int size = 0;


while (in >> c[size]) {
size++;
if ((size-1) == degree)
break;
}

poly.set(c, size);
return in;
}


This is my poly_test.cpp:



#include "Polynomial.h"
#include <iostream>
using namespace std;

int main(void) {

double c1 = {0, 1, 2, 3, 4};
double c2 = {0, 1, 2, 3, 4, 5, 6};

Polynomial p1(c1, 5);
Polynomial p2(c2, 7);

Polynomial p3;
cout << "Enter p3: ";
cin >> p3;

cout << "p1: ";
cout << p1 << endl;

cout << "p2: ";
cout << p2 << endl;

cout << "p3: ";
cout << p3 << endl;

Polynomial p4;
p4 = p1 + p2;
cout << "p4 = p1 + p2, p4: ";
cout << p4 << endl;

double value = p1.f(2);
cout << "Evaluating p1 at x = 2, p1 = ";
cout << value << endl;

Polynomial p6(c1, 5);
cout << "p6: ";
cout << p6 << endl;
if (p6 == p1) {
cout << "p6 and p1 are equal. Equality test passed" <<
endl;
}
else {
cout << "Equality test failed" << endl;
}

return 0;
}


This is the error that I am getting:
segmentation fault error










share|improve this question


















  • 2




    if (coefficients != NULL) delete coefficients; ??? In the constructor? In the destructor, OK, but here... Use a std::vector instead.
    – Matthieu Brucher
    Nov 20 at 22:59










  • I second that. An enormous amount of this code goes away if you only used std::vector<double> to store your coefficients. And that bug in the copy-ctor is pretty blatant.
    – WhozCraig
    Nov 20 at 23:06










  • Rule one. Never use using namespace xxx; in a header file. It just opens a can of problems. Rule 2: Don't include more than you need. Your header file just needs <iosfwd> (not <iostream>). Rule 3. If you allocate memory as an array, delete it as an array, delete coef....
    – Bo R
    Nov 20 at 23:17










  • @BoR Wait a sec. I thought Rule Three was if you have a copy constructor, assignment operator or destructor you probably need all three.
    – user4581301
    Nov 21 at 0:08










  • @user4581301 Sorry, just bad of me naming my rules like that.
    – Bo R
    Nov 21 at 14:21














-1












-1








-1







I am getting a segmentation fault error when compiling my code. I don't know how to fix it. I am supposed to compile my Polynomial.cpp with my professor's poly_check.o, but I get a segmentation fault error.



This is my Polynomial.h:



#ifndef POLYNOMIAL_H
#define POLYNOMIAL_H

#include <iostream>
using namespace std;

class Polynomial {

private:
double *coefficients;
int size;

public:

Polynomial();
Polynomial(double c, int size);
Polynomial(const Polynomial &poly);

~Polynomial();

void set(double c, int size);

inline int getDegree() const {
return size - 1;
}

double f(double x)const;

bool operator== (const Polynomial &poly)const;
Polynomial operator+ (const Polynomial &poly)const;

friend ostream & operator << (ostream &out, const
Polynomial &poly);
friend istream & operator >> (istream &in, Polynomial
&poly);

};

#endif


This is my Polynomial.cpp:



#include "Polynomial.h"
#include <iostream>
#include <cmath>

using namespace std;

Polynomial::Polynomial() {
size = 0;
coefficients = NULL;
}

Polynomial::Polynomial(double c, int size) {

this->size = size;
coefficients = new double[size];

for (int i = 0; i < size; i++) {
coefficients[i] = c[i];
}
}

Polynomial::Polynomial(const Polynomial &poly) {

if (coefficients != NULL)
delete coefficients;

this->size = poly.size;
coefficients = new double[size];

for (int i = 0; i < size; i++)
coefficients[i] = poly.coefficients[i];
}

Polynomial::~Polynomial() {

if (coefficients != NULL)
delete coefficients;
}

void Polynomial::set(double c, int size) {

this->size = size;
if (coefficients != NULL)
delete coefficients;

coefficients = new double[size];

for (int i = 0; i < size; i++)
coefficients[i] = c[i];
}

double Polynomial::f(double x)const {

double value = 0.0;

for (int i = 0; i < size; i++) {
value += (coefficients[i] * pow(x, i));
}

return value;
}

bool Polynomial::operator== (const Polynomial &poly)const {

if (this->size != poly.size)
return false;

for (int i = 0; i < size; i++) {
if (poly.coefficients[i] != coefficients[i])
return false;
}

return true;
}


Polynomial Polynomial::operator+ (const Polynomial &poly)const {

int maxSize = size;
if (poly.size > maxSize)
maxSize = poly.size;

double sum[maxSize] = {0.0};

for (int i = 0; i < size; i++) {
sum[i] = coefficients[i];
}

for (int i = 0; i < poly.size; i++) {
sum[i] += poly.coefficients[i];
}

Polynomial sumP(sum, maxSize);
return sumP;
}

ostream &operator << (ostream &out, const Polynomial &poly) {

for (int i = poly.size - 1; i >= 0; i--) {

if (i != poly.size - 1) {
if (poly.coefficients[i] >= 0)
out << " + ";
else
out << " - ";
}
out << poly.coefficients[i];
if (i == 0)
continue;
if (i == 1)
out << "x";
else
out << "x^" << i;
}

return out;
}

istream &operator >> (istream &in, Polynomial &poly) {

int degree;
in >> degree;

double c[100];
int size = 0;


while (in >> c[size]) {
size++;
if ((size-1) == degree)
break;
}

poly.set(c, size);
return in;
}


This is my poly_test.cpp:



#include "Polynomial.h"
#include <iostream>
using namespace std;

int main(void) {

double c1 = {0, 1, 2, 3, 4};
double c2 = {0, 1, 2, 3, 4, 5, 6};

Polynomial p1(c1, 5);
Polynomial p2(c2, 7);

Polynomial p3;
cout << "Enter p3: ";
cin >> p3;

cout << "p1: ";
cout << p1 << endl;

cout << "p2: ";
cout << p2 << endl;

cout << "p3: ";
cout << p3 << endl;

Polynomial p4;
p4 = p1 + p2;
cout << "p4 = p1 + p2, p4: ";
cout << p4 << endl;

double value = p1.f(2);
cout << "Evaluating p1 at x = 2, p1 = ";
cout << value << endl;

Polynomial p6(c1, 5);
cout << "p6: ";
cout << p6 << endl;
if (p6 == p1) {
cout << "p6 and p1 are equal. Equality test passed" <<
endl;
}
else {
cout << "Equality test failed" << endl;
}

return 0;
}


This is the error that I am getting:
segmentation fault error










share|improve this question













I am getting a segmentation fault error when compiling my code. I don't know how to fix it. I am supposed to compile my Polynomial.cpp with my professor's poly_check.o, but I get a segmentation fault error.



This is my Polynomial.h:



#ifndef POLYNOMIAL_H
#define POLYNOMIAL_H

#include <iostream>
using namespace std;

class Polynomial {

private:
double *coefficients;
int size;

public:

Polynomial();
Polynomial(double c, int size);
Polynomial(const Polynomial &poly);

~Polynomial();

void set(double c, int size);

inline int getDegree() const {
return size - 1;
}

double f(double x)const;

bool operator== (const Polynomial &poly)const;
Polynomial operator+ (const Polynomial &poly)const;

friend ostream & operator << (ostream &out, const
Polynomial &poly);
friend istream & operator >> (istream &in, Polynomial
&poly);

};

#endif


This is my Polynomial.cpp:



#include "Polynomial.h"
#include <iostream>
#include <cmath>

using namespace std;

Polynomial::Polynomial() {
size = 0;
coefficients = NULL;
}

Polynomial::Polynomial(double c, int size) {

this->size = size;
coefficients = new double[size];

for (int i = 0; i < size; i++) {
coefficients[i] = c[i];
}
}

Polynomial::Polynomial(const Polynomial &poly) {

if (coefficients != NULL)
delete coefficients;

this->size = poly.size;
coefficients = new double[size];

for (int i = 0; i < size; i++)
coefficients[i] = poly.coefficients[i];
}

Polynomial::~Polynomial() {

if (coefficients != NULL)
delete coefficients;
}

void Polynomial::set(double c, int size) {

this->size = size;
if (coefficients != NULL)
delete coefficients;

coefficients = new double[size];

for (int i = 0; i < size; i++)
coefficients[i] = c[i];
}

double Polynomial::f(double x)const {

double value = 0.0;

for (int i = 0; i < size; i++) {
value += (coefficients[i] * pow(x, i));
}

return value;
}

bool Polynomial::operator== (const Polynomial &poly)const {

if (this->size != poly.size)
return false;

for (int i = 0; i < size; i++) {
if (poly.coefficients[i] != coefficients[i])
return false;
}

return true;
}


Polynomial Polynomial::operator+ (const Polynomial &poly)const {

int maxSize = size;
if (poly.size > maxSize)
maxSize = poly.size;

double sum[maxSize] = {0.0};

for (int i = 0; i < size; i++) {
sum[i] = coefficients[i];
}

for (int i = 0; i < poly.size; i++) {
sum[i] += poly.coefficients[i];
}

Polynomial sumP(sum, maxSize);
return sumP;
}

ostream &operator << (ostream &out, const Polynomial &poly) {

for (int i = poly.size - 1; i >= 0; i--) {

if (i != poly.size - 1) {
if (poly.coefficients[i] >= 0)
out << " + ";
else
out << " - ";
}
out << poly.coefficients[i];
if (i == 0)
continue;
if (i == 1)
out << "x";
else
out << "x^" << i;
}

return out;
}

istream &operator >> (istream &in, Polynomial &poly) {

int degree;
in >> degree;

double c[100];
int size = 0;


while (in >> c[size]) {
size++;
if ((size-1) == degree)
break;
}

poly.set(c, size);
return in;
}


This is my poly_test.cpp:



#include "Polynomial.h"
#include <iostream>
using namespace std;

int main(void) {

double c1 = {0, 1, 2, 3, 4};
double c2 = {0, 1, 2, 3, 4, 5, 6};

Polynomial p1(c1, 5);
Polynomial p2(c2, 7);

Polynomial p3;
cout << "Enter p3: ";
cin >> p3;

cout << "p1: ";
cout << p1 << endl;

cout << "p2: ";
cout << p2 << endl;

cout << "p3: ";
cout << p3 << endl;

Polynomial p4;
p4 = p1 + p2;
cout << "p4 = p1 + p2, p4: ";
cout << p4 << endl;

double value = p1.f(2);
cout << "Evaluating p1 at x = 2, p1 = ";
cout << value << endl;

Polynomial p6(c1, 5);
cout << "p6: ";
cout << p6 << endl;
if (p6 == p1) {
cout << "p6 and p1 are equal. Equality test passed" <<
endl;
}
else {
cout << "Equality test failed" << endl;
}

return 0;
}


This is the error that I am getting:
segmentation fault error







c++






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Nov 20 at 22:57









Joven

32




32








  • 2




    if (coefficients != NULL) delete coefficients; ??? In the constructor? In the destructor, OK, but here... Use a std::vector instead.
    – Matthieu Brucher
    Nov 20 at 22:59










  • I second that. An enormous amount of this code goes away if you only used std::vector<double> to store your coefficients. And that bug in the copy-ctor is pretty blatant.
    – WhozCraig
    Nov 20 at 23:06










  • Rule one. Never use using namespace xxx; in a header file. It just opens a can of problems. Rule 2: Don't include more than you need. Your header file just needs <iosfwd> (not <iostream>). Rule 3. If you allocate memory as an array, delete it as an array, delete coef....
    – Bo R
    Nov 20 at 23:17










  • @BoR Wait a sec. I thought Rule Three was if you have a copy constructor, assignment operator or destructor you probably need all three.
    – user4581301
    Nov 21 at 0:08










  • @user4581301 Sorry, just bad of me naming my rules like that.
    – Bo R
    Nov 21 at 14:21














  • 2




    if (coefficients != NULL) delete coefficients; ??? In the constructor? In the destructor, OK, but here... Use a std::vector instead.
    – Matthieu Brucher
    Nov 20 at 22:59










  • I second that. An enormous amount of this code goes away if you only used std::vector<double> to store your coefficients. And that bug in the copy-ctor is pretty blatant.
    – WhozCraig
    Nov 20 at 23:06










  • Rule one. Never use using namespace xxx; in a header file. It just opens a can of problems. Rule 2: Don't include more than you need. Your header file just needs <iosfwd> (not <iostream>). Rule 3. If you allocate memory as an array, delete it as an array, delete coef....
    – Bo R
    Nov 20 at 23:17










  • @BoR Wait a sec. I thought Rule Three was if you have a copy constructor, assignment operator or destructor you probably need all three.
    – user4581301
    Nov 21 at 0:08










  • @user4581301 Sorry, just bad of me naming my rules like that.
    – Bo R
    Nov 21 at 14:21








2




2




if (coefficients != NULL) delete coefficients; ??? In the constructor? In the destructor, OK, but here... Use a std::vector instead.
– Matthieu Brucher
Nov 20 at 22:59




if (coefficients != NULL) delete coefficients; ??? In the constructor? In the destructor, OK, but here... Use a std::vector instead.
– Matthieu Brucher
Nov 20 at 22:59












I second that. An enormous amount of this code goes away if you only used std::vector<double> to store your coefficients. And that bug in the copy-ctor is pretty blatant.
– WhozCraig
Nov 20 at 23:06




I second that. An enormous amount of this code goes away if you only used std::vector<double> to store your coefficients. And that bug in the copy-ctor is pretty blatant.
– WhozCraig
Nov 20 at 23:06












Rule one. Never use using namespace xxx; in a header file. It just opens a can of problems. Rule 2: Don't include more than you need. Your header file just needs <iosfwd> (not <iostream>). Rule 3. If you allocate memory as an array, delete it as an array, delete coef....
– Bo R
Nov 20 at 23:17




Rule one. Never use using namespace xxx; in a header file. It just opens a can of problems. Rule 2: Don't include more than you need. Your header file just needs <iosfwd> (not <iostream>). Rule 3. If you allocate memory as an array, delete it as an array, delete coef....
– Bo R
Nov 20 at 23:17












@BoR Wait a sec. I thought Rule Three was if you have a copy constructor, assignment operator or destructor you probably need all three.
– user4581301
Nov 21 at 0:08




@BoR Wait a sec. I thought Rule Three was if you have a copy constructor, assignment operator or destructor you probably need all three.
– user4581301
Nov 21 at 0:08












@user4581301 Sorry, just bad of me naming my rules like that.
– Bo R
Nov 21 at 14:21




@user4581301 Sorry, just bad of me naming my rules like that.
– Bo R
Nov 21 at 14:21












1 Answer
1






active

oldest

votes


















2














In general, you should test your own code as you develop it. Don't write this much code and then plug it into a test function; it will fail, and the process of debugging it will be long and discouraging.



The specific problem (or one of them) is that you neglected to implement operator=. Are you familiar with shallow copies and deep copies? The default copy constructor is a shallow copier, so that two instances of Polynomial wind up with pointers to the same array. Then when they die, they both try to delete it.






share|improve this answer























    Your Answer






    StackExchange.ifUsing("editor", function () {
    StackExchange.using("externalEditor", function () {
    StackExchange.using("snippets", function () {
    StackExchange.snippets.init();
    });
    });
    }, "code-snippets");

    StackExchange.ready(function() {
    var channelOptions = {
    tags: "".split(" "),
    id: "1"
    };
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function() {
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled) {
    StackExchange.using("snippets", function() {
    createEditor();
    });
    }
    else {
    createEditor();
    }
    });

    function createEditor() {
    StackExchange.prepareEditor({
    heartbeatType: 'answer',
    autoActivateHeartbeat: false,
    convertImagesToLinks: true,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: 10,
    bindNavPrevention: true,
    postfix: "",
    imageUploader: {
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    },
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    });


    }
    });














    draft saved

    draft discarded


















    StackExchange.ready(
    function () {
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53402857%2fhow-to-fix-segmentation-fault-for-c%23new-answer', 'question_page');
    }
    );

    Post as a guest















    Required, but never shown

























    1 Answer
    1






    active

    oldest

    votes








    1 Answer
    1






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes









    2














    In general, you should test your own code as you develop it. Don't write this much code and then plug it into a test function; it will fail, and the process of debugging it will be long and discouraging.



    The specific problem (or one of them) is that you neglected to implement operator=. Are you familiar with shallow copies and deep copies? The default copy constructor is a shallow copier, so that two instances of Polynomial wind up with pointers to the same array. Then when they die, they both try to delete it.






    share|improve this answer




























      2














      In general, you should test your own code as you develop it. Don't write this much code and then plug it into a test function; it will fail, and the process of debugging it will be long and discouraging.



      The specific problem (or one of them) is that you neglected to implement operator=. Are you familiar with shallow copies and deep copies? The default copy constructor is a shallow copier, so that two instances of Polynomial wind up with pointers to the same array. Then when they die, they both try to delete it.






      share|improve this answer


























        2












        2








        2






        In general, you should test your own code as you develop it. Don't write this much code and then plug it into a test function; it will fail, and the process of debugging it will be long and discouraging.



        The specific problem (or one of them) is that you neglected to implement operator=. Are you familiar with shallow copies and deep copies? The default copy constructor is a shallow copier, so that two instances of Polynomial wind up with pointers to the same array. Then when they die, they both try to delete it.






        share|improve this answer














        In general, you should test your own code as you develop it. Don't write this much code and then plug it into a test function; it will fail, and the process of debugging it will be long and discouraging.



        The specific problem (or one of them) is that you neglected to implement operator=. Are you familiar with shallow copies and deep copies? The default copy constructor is a shallow copier, so that two instances of Polynomial wind up with pointers to the same array. Then when they die, they both try to delete it.







        share|improve this answer














        share|improve this answer



        share|improve this answer








        edited Nov 21 at 0:12

























        answered Nov 21 at 0:05









        Beta

        70.9k7108128




        70.9k7108128






























            draft saved

            draft discarded




















































            Thanks for contributing an answer to Stack Overflow!


            • Please be sure to answer the question. Provide details and share your research!

            But avoid



            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.


            To learn more, see our tips on writing great answers.





            Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


            Please pay close attention to the following guidance:


            • Please be sure to answer the question. Provide details and share your research!

            But avoid



            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.


            To learn more, see our tips on writing great answers.




            draft saved


            draft discarded














            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53402857%2fhow-to-fix-segmentation-fault-for-c%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            Popular posts from this blog

            404 Error Contact Form 7 ajax form submitting

            How to know if a Active Directory user can login interactively

            Refactoring coordinates for Minecraft Pi buildings written in Python