私はバグが動的配列の削除操作に関連していると思う。しかし、私は詳しくは分かりません。短いC++コードのバグです。クラスの解体機能が原因だと思います。しかし、私は見つけることができません
私は今、自分自身を勉強しているので、私は完全にフレッシュハンドです。これは本の小さな運動であり、私はそれを解決しようとしています。 "main()"関数の部分は元のものなので、 "Array2"クラスについてのみコードすることができます。
ありがとうございます!
#include <iostream>
#include <cstring>
using namespace std;
class Array2
{
int row, col;
int **a;
public:
Array2(int s1=1, int s2=1)
{
row = s1;
col = s2;
a = new int *[row];
for (int i = 0; i < row; i++)
{
a[i] = new int[col];
}
};
Array2(Array2 & b)
{
a = b.a;
}
~Array2()
{
for (int i = 0; i < row; i++)
{
delete[] a[i];
}
delete[] a;
}
int * operator [] (int i)
{
return a[i];
}
int operator() (int s1, int s2)
{
return a[s1][s2];
}
};
int main() {
Array2 a(3, 4);
int i, j;
for (i = 0; i < 3; ++i)
for (j = 0; j < 4; j++)
a[i][j] = i * 4 + j;
for (i = 0; i < 3; ++i) {
for (j = 0; j < 4; j++) {
cout << a(i, j) << ",";
}
cout << endl;
}
cout << "next" << endl;
Array2 b; b = a;
for (i = 0; i < 3; ++i) {
for (j = 0; j < 4; j++) {
cout << b[i][j] << ",";
}
cout << endl;
}
return 0;
}**
コピーコンストラクタが間違っています。同じメモリが 'delete'dされて複数回実行されます。 – DeiDei
また、誰かがデストラクタをdeconstructorと呼ぶのは初めてですが、クールだと思います。 – DeiDei
笑、ありがとう! – user7487638