簡體   English   中英

VS2012中的C ++自定義內存分配鏈接錯誤

[英]C++ Custom memory allocation link error in VS2012

當我嘗試覆蓋VS2012中的默認內存分配函數時,出現以下鏈接器錯誤:

1> Main.obj:錯誤LNK2005:“ void * __cdecl運算符new(unsigned int)”(?? 2 @ YAPAXI @ Z)已在MSVCRTD.lib(MSVCR110D.dll)中定義1> Main.obj:錯誤LNK2005:“ void __cdecl運算符delete(void *)”(?? 3 @ YAXPAX @ Z)已在MSVCRTD.lib(MSVCR110D.dll)1> c:\\ users \\ documents \\ visual studio 2012 \\ Projects \\ CustomMemoryAllocator \\ Debug \\ CustomMemoryAllocator中定義。 exe:致命錯誤LNK1169:找到一個或多個乘法定義的符號

這是我的代碼(我沒有智能感知錯誤):

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

有人可以幫忙嗎?

圖書館未按正確的順序鏈接

嘗試在文件頂部添加

#pragma comment(linker, "/nodefaultlib:libc.lib")
#pragma comment(linker, "/nodefaultlib:libcd.lib")

否則,請遵循以下說明。

嘗試使用DLL而不是靜態鏈接庫。 轉到項目屬性/ C ++ /代碼生成/運行時庫,然后選擇DLL選項。

Windows將DLL或EXE稱為模塊。 不允許一個模塊多次定義符號,但是一個進程使用的兩個不同模塊可以定義同一符號。 使用DLL時,在您和MSVC模塊中都定義了運算符new(),這不會導致任何錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM