Конфликты скрытого менеджера памяти bds 2006 C (класс new / delete [] и AnsiString)

я используюBDS 2006 Turbo C ++ давно и некоторые из моих крупных проектов (CAD / CAM, 3D GFX-движки и астрономические вычисления) иногда выдают исключение (например, один раз в 3–12 месяцев работы в тяжелых условиях 24/7). После обширной отладки я нашел это:

//code1:
struct _s { int i; }    // any struct
_s *s=new _s[1024];     // dynamic allocation
delete[] s;             // free up memory

этот код обычно находится внутри шаблона, где_s может быть также классом, поэтомуdelete[] этот код должен работать правильно, ноdelete[] не работает должным образом для структур (классы выглядят нормально). Никаких исключений не выдается, память освобождается, но это каким-то образом повреждает таблицы распределения диспетчера памяти, и после этого любое новое выделение может быть неправильным (new может создавать перекрывающиеся выделения с уже выделенным пространством или даже нераспределенным пространством, следовательно, случайные исключения)

Я обнаружил, что если я добавлю пустой деструктор в_s чем вдруг кажется все ок

struct _s { int i; ~_s(){}; }

Что ж, теперь начинается странная часть. После того, как я обновлю это для своих проектов, я обнаружил, чтоAnsiString класс имеет также плохие перераспределения. Например:

//code2:
int i;
_s *dat=new _s[1024];
AnsiString txt="";
// setting of dat
for (i=0;i

Ответы на вопрос(1)

Ваш ответ на вопрос