我目前正在Visual Studio 2010中对非托管的Visual C ++代码进行单元测试。
我的解决方案的结构如下:
<Solution>
- [0] Static library project (visual c++, no clr)
- [1] Project that's using [0] (visual c++, no clr, referencing [0])
- [2] Unit Test Project (dynamic library, /clr, referencing [0])
</Solution>
Project [0]
正在接受Project [2]
的测试,其中包含SomeClass
:
class SomeClass
{
public:
SomeClass() {}
int Testme() { return 42; }
};
在Project [2]
中,我正在按以下方式测试SomeClass
:
[TestClass]
public ref class SomeClassUnitTests
{
public:
[TestMethod]
void TestmeReturns42()
{
SomeClass sc;
Assert::AreEqual<int>(42, sc.Testme());
}
};
但是,当我为堆上的SomeClass
分配内存时,并且仅当我随后对其调用call时,才会弹出一条消息,表明堆已损坏/无效。
[TestClass]
public ref class SomeClassUnitTests
{
public:
[TestMethod]
void TestmeReturns42()
{
SomeClass *ptr = new SomeClass();
Assert::AreEqual<int>(42, ptr->Testme());
// Without following line, everything works:
if (ptr) delete ptr;
}
};
什么是导致测试直接抛出这里的问题?为什么分配带有“ new”功能的内存而删除却不起作用?