Buil 1583 CopyRates перестала работать, если приёмный массив - статически выделенный
Мда. C нарастающим количеством ошибок в новых версиях критически необходима опция отката обновления.
Можно держать специально версию , которая на "Ваш" взгляд стабильна, можно ведь не спешить ставить Update
Напишу сюда, поскольку появилось в этом же билде. Раньше всё было нормально.
Создаём такие классы:
struct StructA { ushort vt; StructA() : vt( 0 ){} StructA( const ushort varType ) : vt( varType ){} }; struct StructB : public StructA { uint uintVal; StructB(){} StructB( const uint val ) : StructA( 2 ), uintVal( val ){} }; struct StructC : public StructA { ulong ulongVal; StructC(){} StructC( const ulong val ) : StructA( 3 ), ulongVal( val ){} }; class ClassV { StructC mData; public: ClassV(){} ClassV( const uint val ); }; ClassV::ClassV( const uint val ) { StructB newData( val ); mData = newData; }
Компилятор выдаёт предупреждение: "implicit struct cast".
Делаем явное преобразование:
ClassV::ClassV( const uint val ) { StructB newData( val ); mData = (StructC)newData; }
Появляется сообщение об ошибке: '(StructC)' - invalid cast operation.
Оно конечно и сейчас работает, если не обращать внимание на предупреждения.
Но я привык обращать.
Компилятор выдаёт предупреждение: "implicit struct cast".
Делаем явное преобразование:
Появляется сообщение об ошибке: '(StructC)' - invalid cast operation.
Windows 10 Creators:
Согласно справке CopyRates я могу использовать как динамический, так и статически выделенный массив
При копировании заранее неизвестного количества данных рекомендуется в качестве приемного массива использовать динамический массив, так как если данных оказывается меньше (или больше), чем вмещает массив, то производится попытка перераспределения массива таким образом, чтобы запрошенные данные поместились целиком и полностью.
Если необходимо копировать заранее известное количество данных, то лучше это делать в статически выделенный буфер, чтобы избежать излишнего перевыделения памяти.
Поэтому делаю попытку копировать в статически выделенный массив:
и сразу получаю ошибку: кол-во скопированных элементов "-1" и ошибка "4006":
ERR_INVALID_ARRAY
4006
Массив неподходящего типа, неподходящего размера или испорченный объект динамического массива
Как только приёмный массив объявить, как динамический:
всё сразу начинает работать.
Добавлено: в biuld 1580 CopyRates работала со статически выделенным массивом.