を読まれた後に1になり、私は、コードの非常に簡単かつ最低限の部分を実行している:C++ - 配列の値がそう
template <typename T>
matrix<T>::matrix(int r, int c, int a)
{
int data2[6*4] = {-1, 12, 23, 34, 45, 56,
11, 22, 33, 44, 55, 66,
21, 32, 43, 54, 65, -1,
31, 42, 53, 64, -1, -1};
mData = new T(6*4);
for(int p=0; p < 6*4; p++){
mData[p] = T(data2[p]);
std::cout << " " << mData[p] << ":";
std::cout << " " << mData[p] << ":" << std::endl; //second time is read
};
for(int p=0; p < 4; p++){
for(int p2=0; p2 < 6; p2++){
if(mData[p2 + p * 6] == 1)std::cout << "FOUND ONE" << std::endl;
}
}
}
int main(){
int i = 6;
matrix<int> b = matrix<int>(i,i, 0);
}
しかし、ランダムな間隔でデータの値がございます2回目に読み込み中に変更します。初めてのことではなく、常に第2のものです。ここにあなたの例があります:
-1: -1:
12: 12:
23: 23:
34: 34:
45: 45:
56: 56:
11: 11:
22: 22:
33: 1:
44: 44:
55: 55:
66: 66:
21: 21:
32: 32:
43: 43:
54: 54:
65: 65:
-1: -1:
31: 31:
42: 42:
53: 53:
64: 64:
-1: -1:
-1: -1:
FOUND ONE
Process returned 0 (0x0) execution time : 0.085 s
Press any key to continue.
構造には何も触れていないので、何が起こっているのか分かりません。番号は常に正しく保存されます(最初の印刷が常に正しいので)。その後は破損します...何が起こっているのか分かりません。どんな助け?
EDIT:見つけ
ソリューション、どうやら私は単純に「[]」「)(」のために、そしてオーバーと気づいたことはありません上のコードを見ているにもかかわらず、間違えました。 (それは後見で明らかです)。
ありがとうございます。このコード行で
あなたのクラスが3のルールに従わないと思われ、あなたが実際に削除されたメモリにアクセスしています。 MCVEを投稿してください –
私はあなたの 'mData'を正しく初期化していないと思います。私はあなたがこの場合単一の整数として初期化していると思うので、 'mData [p]'でオフセットして値を設定すると、その値は 'mData [p] 'それは予約されていません。たぶん 'std :: vector mData'ですか? –
Engineero