当我尝试覆盖VS2012中的默认内存分配函数时,我收到以下链接器错误:
1> Main.obj:错误LNK2005:“void * __cdecl operator new(unsigned int)“(?? 2 @ YAPAXI @ Z)已在MSVCRTD.lib中定义(MSVCR110D.dll) 1> Main.obj:错误LNK2005:“void __cdecl operator delete(void *)” (?? 3 @ YAXPAX @ Z)已在MSVCRTD.lib中定义(MSVCR110D.dll) 1> c:\ users \ documents \ visual studio 2012 \ Projects \ CustomMemoryAllocator \ Debug \ CustomMemoryAllocator.exe: 致命错误LNK1169:找到一个或多个多重定义的符号
这是我的代码(我没有得到intellisense错误):
#include <iostream>
using namespace std;
void *operator new(size_t size){
if(void *mem = malloc(size)){
cout << "allocated memory" << endl;
return mem;
}
else{
throw bad_alloc();
}
}
void operator delete(void* mem) throw() {
cout << "deleting" << endl;
free(mem);
}
int main(){
cout << "test";
int* a = new int(4);
delete a;
int b = 0;
cin >> b;
}
有人可以帮忙吗?
答案 0 :(得分:2)
图书馆未按正确顺序链接
尝试在文件顶部添加
#pragma comment(linker, "/nodefaultlib:libc.lib")
#pragma comment(linker, "/nodefaultlib:libcd.lib")
请遵循these说明。
答案 1 :(得分:1)
尝试使用DLL而不是静态链接库。转到项目属性/ C ++ /代码生成/运行时库,然后选择DLL选项。
Windows调用DLL或EXE模块。不允许模块多次定义符号,但一个进程使用的两个不同模块可以定义相同的符号。使用DLL时,在您和MSVC模块中都定义了运算符new(),这不会导致错误。