Tag: C ++ builder 2006

BDS 2006 C隐藏内存pipe理器冲突(类新/删除与AnsiString)

我现在使用BDS 2006 Turbo C ++很长一段时间了,我的一些更大的项目( CAD / CAM,3D gfx引擎和天文计算)偶尔会抛出一个exception(例如一次在3到12个月内每天24/7重用)。 广泛的debugging后,我发现这一点: //code1: struct _s { int i; } // any struct _s *s=new _s[1024]; // dynamic allocation delete[] s; // free up memory 这个代码通常在模板里面,因为_s也可以是类,所以delete[]这个代码应该可以正常工作,但是delete[]对于结构(类看起来不错)不能正常工作。 没有任何例外,内存被释放,但它以某种方式损害内存pipe理器分配表,并在此之后,任何新的分配可能是错误的(新可以创build重叠的分配已经分配的空间,甚至未分配的空间,因此偶尔的例外) 我发现,如果我添加空的析构函数比突然似乎一切OK struct _s { int i; ~_s(){}; } 那么现在是怪异的一部分。 在我更新这个项目之后,我发现AnsiString类也有不好的重新分配。 例如: //code2: int i; _s *dat=new _s[1024]; AnsiString txt=""; // setting […]