地址0x20ec8348e5894855不是堆叠的、恶意的或(最近)释放的

Address 0x20ec8348e5894855 is not stack'd, malloc'd or (recently) free'd

本文关键字:最近 释放 恶意 地址 0x20ec8348e5894855      更新时间:2023-10-16

我有两个自己的库,例如" ida"answers" xida"。我想让他们通过回调函数一起通信。

ida:
ida.h,ida.cpp,ida_a.h,ida_a.cpp

xida:
xida.h,xida.cpp,xida_a.h,xida_a.cpp

ida:
ida_a.h:

class IDA_A
{
private:
    XIDA *mXIDA;
public:
    static int IDA_Callback(void* this_ptr, void *vPara ){
        std::cout << "IDA -- " << "INCOMING CALLBACK == NULL" << std::endl;
    }
}

ida_a.cpp:

void IDA_A::Init(std::string vIdent){
    this->mXIDA = new XIDA( (void*) &this->IDA_Callback);
}

现在xida:

xida.h:

class XIDA{
public:
    XIDA(void *vPara);
};

xida.cpp:

XIDA_A m_XIDA_A;
XIDA::XIDA(void *vPara){
    std::cout << "TEST XIDA ---- A" << std::endl;
    m_XIDA_A.Init(vPara);
}

xida_a.h:

typedef int(*IDACallback) (void*, void*);
class XIDA_A{
private:
    IDACallback mIDACallback;
public:
    void Init(void *vPara);
}

xida_a.cpp:

1 void XIDA_A::Init(void *vPara){
2 int nErr = 0;
3    cout << "XIDA -- INIT A **************************************************  " << vPara << endl;
4   try{
5       this->mIDACallback = *static_cast < IDACallback* > (vPara);
6   } catch (...){
7       nErr = 1;
8    }
9   if(nErr == 0){
10      cout << "XIDA -- INIT B **************************************  " << this->mIDACallback << endl;
11      this->mIDACallback(NULL, NULL); // <------ HERE IS THE ERROR
12  }
13 }

虽然普通呼叫(通过终端和路径/bin(错误是:

Speicherzugriffsfehler (engl. memory access error <?>)

使用Valgrind:

XIDA -- INIT A **************************************************  0x4e40a19
XIDA -- INIT B **************************************  1
==20001== Jump to the invalid address stated on the next line
==20001==    at 0x20EC8348E5894855: ???
==20001==    by 0x504C690: XIDA::XIDA(void*) (xida.cpp:10)
==20001==    by 0x4E405CB: IDA_A::Init(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >) (ida_a.cpp:37)
==20001==    by 0x4E3FE9F: IDA::IDA(char const*) (ida.cpp:13)
==20001==    by 0x401932: main (main.cpp:13)
==20001==  Address 0x20ec8348e5894855 is not stack'd, malloc'd or (recently) free'd

所以,现在我知道错误在哪里,但是我不知道如何修复它。

IDA_A::Init实际上并未声明,但是除此之外,您将vPara(包含一个指示器的指针(施加到指针以函数的指针,然后将其删除:

this->mIDACallback = *static_cast < IDACallback* > (vPara);

应该是

this->mIDACallback = static_cast < IDACallback > (vPara);