【发布时间】:2013-10-08 13:05:00
【问题描述】:
在 cli c++ 项目的本地类的非静态函数中,我将新的内存空间分配给对象的 2 个字段:
Name = new wchar_t[50];
Type = new wchar_t[50];
其中名称和类型声明为:
class MyClass
{
...
whcar_t *Name;
whcar_t *Type;
...
}
问题是分配内存后,Name 和 Type 字段指向同一个内存。怎么解决?
更新:
我投射的每一个新的地址都会返回相同的地址。 new SomeClass() 返回与 new wchar_t[50] 相同的指针!它可能与cli项目中分配本机内存的一些错误有关吗?
更新 2
Native class, which fields are initialized in cli class
Managed class function, where Terminal used
内存分配不适用于 malloc、calloc、new 运算符,但可以使用 LocalAlloc 和静态分配,如 wchar_t Name[50]。据我了解,很难找到分配错误的原因,但我什至不知道,这是什么迹象?正如@Hans Passant 所说,堆损坏?或者它可能是操作系统故障或某种自定义 AutoCad 内存分配的错误?有什么办法可以在当前代码行找到哪个堆用于分配内存?
我正在使用 MS Visual Studio 2008 SP1。
将对象初始化从基于堆栈替换为堆解决了这个问题。
【问题讨论】:
-
你如何确定
Name和Type指向同一个内存? -
您能否提供一个 SSCCE 来显示此问题?
-
查看他们分配的地址,还是查看他们指向的内容?
-
您将一些内容复制到其中一个然后打印另一个怎么样?这应该让事情更清楚一点......
-
@FLCL 我看到调试器有时会报告不正确的信息。您看到的行为很奇怪,您用来观察行为的工具似乎比正在发生的行为更有可能被破坏,除非有其他相关代码不在您的问题中(例如用户定义的
operator new).
标签: c++-cli