我正在编写一个程序,我有一个类,在该类内部(或外部,希望没关系)我有结构。在那个类中,我需要创建一个结构元素数组(我知道我可以使用向量,例如,但在程序中只允许使用简单的动态数组)。
我将一个数组声明为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▒
如果我在删除和分配之前打印相同的数据,我会得到我想要的普通文本。在程序中之后(因为我以前没有,也许这是我的代码的问题,我得到分段错误)。顺便说一句,我在我的 Windows 中使用struct
了 ofstd::string
和 cygwin。你知道这里有什么问题吗?