19.08.2005, 23:03
общий
это ответ
Здравствуйте, Ivaan!
Хотелось бы уточнить, компиляторы C/C++ для стандарта C/C++ версии 2.0 и более забивают на цифру, указанную у delete [] в скобках и убивают массив всегда целиком, но для этого им всегда нужен оригинальный адрес, который был вернут оператором new. Вы подсовываете инвалидный адрес - отсюда и глюк. (только delete [] Vars - будет работать). Если хотите изменять размер выделенного участка памяти, можете использовать WinAPI-шные различные аллоки, вроде LocalAlloc/LocalFree/LocalReAlloc, GlobalAlloc/GlobalFree/GlobalReAlloc, VirtualAlloc/VirtualFree, но от использования new/delete придеться отказаться.
Приложение:
char *Vars;// выделяете памятьVars=(char*)GlobalAlloc(GMEM_FIXED, 1000);// перевыделяете памятьGlobalReAlloc((HGLOBAL)Vars, <новый размер в байтах>, 0);// освобождаете памятьGlobalFree((HGLOBAL)Vars);