Я пишу программу, в которой у меня есть один класс, внутри этого класса (или снаружи, надеюсь, что это не имеет значения) У меня есть структура. В этом классе мне нужно создать массив элементов структуры (я знаю, что могу использовать вектор, например, но в программе разрешено использовать только простые динамические массивы).Как изменить размер массива элементов структуры
Я объявляю массив как 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]
и как изменить размер (и освободить память из старого) в этом случае?
UPDATE:
Спасибо за ответы, я соответственно в моей программе:
T * tmp = new T[newSIZE];
memcpy(tmp, db, newSIZE*sizeof(T));
delete [] db;
db = tmp;
И теперь я получаю странные вещи, после удаления БД и присвоение db
к tmp
я пытаюсь напечатать все данные, содержащиеся в БД (или 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▒
Если я печатаю те же данные перед удалением и назначение, я буду GE t нормальный текст, который я хочу. А после в программе (как и раньше, и, возможно, это проблема с моим кодом, я получаю ошибку сегментации). Кстати, я использую struct
std::string
и cygwin в своих окнах. Вы знаете, в чем проблема?
Ваш 'tmpArr' - это массив указателей. Это выглядит нежелательным. Но опять же, весь код немного бессмыслен. –
* «Единственная проблема заключается в том, что я не знаю точного размера массива» * Вам нужно будет отслеживать этот размер самостоятельно. –
Используйте 'std :: vector'. –