我有一个与Abaqus接口的后处理程序。该程序适用于Abaqus 6.9 EF1。我想更新程序以使用Abaqus 6.12。我没有运气让程序使用更新的API。
我已更新了要在Visual Studio 2010中链接的库列表。所有内容都正确构建和链接。当我运行该程序时,在收到main
:
由于程序很大(> 120k行),我决定回归基础。下面的简单程序运行正常,直到我调用delete
。一旦我拨打delete
,我就会收到相同的错误消息。如果我没有链接到Abaqus库,程序就会完全运行。
#include <iostream>
int main( int argc, char* argv[] )
{
std::cout << "Hello world" << std::endl;
int *p;
p = new int(3);
std::cout << *p << std::endl;
delete p;
return 0;
}
澄清:
案例1 :未链接到Abaqus库。运行得很好。
案例2 :链接到Abaqus库。抛出Debug Assertion Failed消息。
底线:我不明白如何链接,但不使用他们的库打破了简单的程序。
在我以前的Abaqus问题中,我确信自己已经创建了自己的new
和delete
运算符。在调用new
的标准版本时,是否可以调用他们的delete
版本?如果是这样,它们是解决这些功能范围的一种方法吗?
答案 0 :(得分:0)
事实证明,Abaqus在全局命名空间中定义了自己的operator new
和operator delete
。因此,我在不知不觉中链接到operator new
的实现。
但是,Visual Studio将operator new
和而不是的Abaqus定义链接到operator delete
的Abaqus定义。相反,Visual Studio链接到operator delete
的标准定义。
这些函数不能互换使用,因此我收到错误消息。但是,由于Abaqus将operator new
和operator delete
函数放在全局命名空间中,我相信我无法控制哪个函数被链接。
更新:以上只是部分正确。 Abaqus确实定义了他们自己的operator new
,但他们不定义匹配的operator delete
- 至少在全局命名空间中。
因此,Visual Studio无法链接到相应的Abaqus operator delete
,因为它不存在。