私はプログラムを書いています.1つのクラスがあり、そのクラスの中に(または外側に、それが問題にならないことを願っています)、私は構造体を持っています. そのクラスでは、構造体要素の配列を作成する必要があります(たとえば、ベクトルを使用できることはわかっていますが、プログラムでは単純な動的配列の使用のみが許可されています)。
配列を として宣言しT * arr[SIZE]
ますT
。 は構造体です。唯一の問題は、配列の正確なサイズがわからず、必要に応じてサイズを大きくする必要があることです。だから私はそれをサイズ変更する関数を書きました:
if( some cond ){
T * tmpArr[newSIZE];
memcpy( tmp, db, newSIZE*sizeof(T));
delete [] arr;
arr = tmpArr;
}
しかし、私が推測する式に応答するMyClass::T[....]
互換性のないエラーが発生しています。MyClass::T*[SIZE]
arr = tmpArr
私が間違っていることを教えてもらえますか?そして、どのように宣言する方が良いですT * arr[size]
かT * arr = new T[size]
、また、その場合、配列のサイズを変更する (そして古いものからメモリを解放する) にはどうすればよいですか?
アップデート:
答えてくれてありがとう、私はそれに応じてプログラムで行いました:
T * tmp = new T[newSIZE];
memcpy( tmp, db, newSIZE*sizeof(T) );
delete [] db;
db = tmp;
db を削除して割り当てdb
た後tmp
、 db (または tmp ) に含まれるすべてのデータを出力しようとすると、奇妙なことが起こります。
Smith2 Michigan ave▒ ACME, Ltd. One ACME roa▒
Smit▒ Michigan ave` ACME, Ltd. One ACME roa "
One ACME road#@"▒▒▒▒Michigan ave`▒▒▒▒Smit▒"
▒▒ ▒8 Ltd.#Michigan avenuemith4▒aF▒
削除して割り当てる前に同じデータを印刷すると、必要な通常のテキストが得られます。そして、プログラムの後(以前はなかったので、おそらくそれが私のコードに問題があるため、 Segmentation fault が発生します)。ところで、私は Windows でstruct
ofstd::string
と cygwin を使用しています。ここで何が問題なのか分かりますか?