私は現在、ファイルから球体を読み取ることになっている割り当てに座っています。ファイルからの一般的な入力は次のようになります: "0.182361 -0.0170570.1295820.001816"。、x、y、z座標と球の半径を表します。ファイルを読んでいる間、私は自分の方法を使用しています:「AddSphere」は球を配列に追加します。
void Array::AddSphere(MySphere inp)
{
if (length == 10000 || length == 200000 || length == 30000)
{
ResizeBuffer();
}
this->length++;
*arr = inp;
arr++;
//this->length++;
}
クラス「Array」は、すべての球のホルダーのようなものであり、現在の要素を指している変数「arr」を含んでいます。
class Array
{
public :
int length;
void AddSphere(MySphere inp);
int arrLength();
void RemoveAt(int pos);
void AddFromFile();
MySphere * Buffer;
void CreatenewBuffer();
private:
MySphere * arr;
public:Array()
{
Buffer = new MySphere[10000];
arr = Buffer;
length = 0;
}
~Array()
{
delete[] arr;
delete[] Buffer;
}
};
また、「arr」の最初の要素を指している「Buffer」も含まれています。だから今私の問題は何ですか?問題は、「長さ」が指定された値に等しいときはいつでも、バッファのサイズを動的に増やすことができるようにしたいということです。私のファイルに15000個の要素が含まれているとしましょう。次に、配列に正しい長さを持たせるために、バッファサイズを増やす必要があります。ResizeBuffer()を使用して、それを実行しようとします。
void Array::ResizeBuffer()
{
MySphere * tempBuff = new MySphere[length+10000];
memcpy(tempBuff, Buffer, sizeof((MySphere)*Buffer));
this->Buffer = new MySphere[length+10000];
arr = Buffer;
memcpy(Buffer, tempBuff, sizeof((MySphere)*tempBuff));
//int a = 0;
}
しかし、何らかの理由で、15000のすべてではなく、出力の最後の5000の要素しか取得しません。これは、arrのポインターがバッファー全体を指していないことと関係があると考えましたが、どの試みも機能しません。では、なぜこれが起こっているのでしょうか?
お時間をいただきありがとうございます!