プライベート配列とポインターを持つクラスがあります。私は3つのコンストラクターを持っています.1つはコピーコンストラクターで、もう1つは配列へのポインターをパラメーターとして受け取ります。<< 、 ostream などの演算子をオーバーロードしています。クラスに静的配列へのポインタを渡すと、プログラムは正常に動作します。しかし、動的配列の使用を開始すると、関数の動作がおかしくなり、おかしなデータが出力されました。オペレーターが静的配列と動的配列の両方で機能するように、プログラムで行うべき違いは何ですか? 動的配列 random() を作成し、パラメーターとして渡すポインターを返す別の関数があります。ここに私のコード
質問する
312 次
2 に答える
0
ptr
がクラスのメンバーであると仮定すると、未定義の動作HugeInteger
のケースがいくつかあります。
デフォルトのコンストラクターの場合ptr
、ローカル配列を指すようにします。この配列は、すべてのローカル変数と同様に、宣言されている関数内でのみスコープを持ちます。したがって、デフォルトのコンストラクターがメンバー変数ptr
を返すと、「ぶら下がっています」。
コピー コンストラクターの場合、ptr
ポイントできるメモリを割り当てません。したがって、インデックスを作成すると、未定義のメモリ位置にインデックスが作成されます。
あなたの問題に関しては、基本的にデフォルトのコンストラクターと同じです。pointer
ローカル配列を指すように割り当てarr
ます。関数が返されると、配列はもう存在しないため、ポインターは未使用のメモリを指し、他の関数によって使用されている可能性があります。また、そこで行っているのは動的配列の作成ではなくnew
、 .
于 2013-10-17T17:08:59.477 に答える