私のプログラムがなぜsegであるのか不明です。 Visual Studio 2015コンパイラを使用して実行するたびにエラーが発生しますが、GNUコンパイラを使用して正常にコンパイルできます。誰でもこの問題についての洞察を提供できますか? ダイナミックメモリ(_CrtIsValidHeapPointer)に関する問題
この
は通常EVector.hというファイルに含まれますが、私はそれが#include<iostream>
class EVector
{
public:
EVector();
~EVector();
//Operator Overloading
friend std::istream& operator>>(std::istream&, EVector&); //Input Stream
friend std::ostream& operator<<(std::ostream&, EVector&); //Output Stream
EVector operator=(EVector&);
private:
double* Tuples;
int dimension;
};
を必要として包み以下これを追加しました。これは私のEVector.cppファイル
#include<iostream>
EVector::EVector() {
dimension = 0;
Tuples = NULL;
}
これがされているどのようにI通常は私のダイナミックメモリを削除しますが、何らかの理由でこのプログラムでセグメンテーションフォールトを引き起こしています(少なくともVisual Studioではそう考えています)。
EVector::~EVector() {
if (Tuples != NULL) {
delete[] Tuples;
}
}
EVector.cpp
の
残り
istream& operator>>(istream& instream, EVector& vector) {
cout << "Enter the dimension of the Euclidian Vector: ";
instream >> vector.dimension;
vector.Tuples = new double[vector.dimension];
cout << "Enter the Tuple's Values (The program will take values until all dimensions are full)" << endl;
//Take in Tuples values
for (int x = 0; x < vector.dimension; x++) {
cout << "Enter a Value (" << (vector.dimension - x) << " value(s) left): ";
instream >> vector.Tuples[x];
}
return instream;
}
私はそれがこの機能とは何かを持っていると思う、それは< <と>>オペランド
ostream& operator<<(ostream& outstream, EVector& vector) {
outstream << "Dimension: " << vector.dimension << endl;
outstream << "Tuple's Values: (";
for (int x = 0; x < vector.dimension; x++) {
outstream << vector.Tuples[x] << " ";
}
outstream << ")";
return outstream;
}
ディープコピー機能を(過負荷に私の最初の時間です
EVector EVector::operator=(EVector& vector) {
if (this == &vector) {
return *this;
}
if (Tuples != NULL) {
delete[] Tuples;
}
dimension = vector.dimension;
Tuples = new double[dimension];
for (int i = 0; i < dimension; i++) {
Tuples[i] = vector.Tuples[i];
}
return *this;
}
シガーなし。早速のご返事ありがとうございます。考えられる他のアイデアは? –
ああ、私の馬鹿。ポインタをNULLに設定することは、要素のCOPYが存在するために役立ちません。要素のCOPYには、まだセットポインタが含まれています。デストラクタでポインタのprintfを実行すると、私の意図がわかります。 –
または、ディープコピーのソースのTubles Pointerを無効にします。 –