0

プライベート配列とポインターを持つクラスがあります。私は3つのコンストラクターを持っています.1つはコピーコンストラクターで、もう1つは配列へのポインターをパラメーターとして受け取ります。<< 、 ostream などの演算子をオーバーロードしています。クラスに静的配列へのポインタを渡すと、プログラムは正常に動作します。しかし、動的配列の使用を開始すると、関数の動作がおかしくなり、おかしなデータが出力されました。オペレーターが静的配列と動的配列の両方で機能するように、プログラムで行うべき違いは何ですか? 動的配列 random() を作成し、パラメーターとして渡すポインターを返す別の関数があります。ここに私のコード

4

2 に答える 2

0

ptrがクラスのメンバーであると仮定すると、未定義の動作HugeIntegerのケースがいくつかあります。

デフォルトのコンストラクターの場合ptr、ローカル配列を指すようにします。この配列は、すべてのローカル変数と同様に、宣言されている関数内でのみスコープを持ちます。したがって、デフォルトのコンストラクターがメンバー変数ptrを返すと、「ぶら下がっています」。

コピー コンストラクターの場合、ptrポイントできるメモリを割り当てません。したがって、インデックスを作成すると、未定義のメモリ位置にインデックスが作成されます。


あなたの問題に関しては、基本的にデフォルトのコンストラクターと同じです。pointerローカル配列を指すように割り当てarrます。関数が返されると、配列はもう存在しないため、ポインターは未使用のメモリを指し、他の関数によって使用されている可能性があります。また、そこで行っているのは動的配列の作成ではなくnew、 .

于 2013-10-17T17:08:59.477 に答える