解析标准的新/删除运算符

时间:2013-06-24 21:24:31

标签: c++ visual-studio-2010 memory-management

请在某些背景下查看此问题:Linking unreferenced libraries breaks my program

我有以下程序:

#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;
}

在我链接到第三方库之前,它工作正常。当我在一个更大的程序中链接到我需要的Abaqus库时,上面的程序在尝试运行delete p;时崩溃了。使用Dependency Walker,我发现对operator new的调用与Abaqus提供的operator new定义相关联。但是,对operator delete的调用与标准定义相关联。

我已将new / delete替换为::new / ::delete并获得相同的结果。

有没有办法解决标准的新/删除操作符?或者,我可以强制Visual Studio链接到这些运算符的正确(标准)定义吗?

1 个答案:

答案 0 :(得分:0)

指定链接器选项"/DEFAULTLIB:MSVCRT.LIB"会导致程序成功执行。