0xC0000005:访问冲突写入位置0x00000000

时间:2013-02-09 11:41:45

标签: visual-c++ access-violation loadlibrary

我在构建调试项目时遇到了一个奇怪的问题。我在网上搜索过,但不幸的是我还没有找到任何线索。

我试图在我的控制台应用程序项目中加载一个dll。我的dll有几个函数,我只想调用FUNC1来检查这个函数是否正常工作。

我的dl中的FUNC1声明是:

int FUNC1 (char *inVal, int *retVal)

我已经在我的控制台应用程序中成功加载了dll,并使用函数指针调用FUNC1,如下所示:

int main()
{

HINSTANCE testInstance;

testInstance = LoadLibrary("Path\\to\\my.dll");


typedef int (WINAPI *FUNC1Ptr)(char *inVal, int *retVal);

if(testInstance == NULL)
{
    printf("The dll is not loaded, Please check the path!\n");
}
else 
{

    printf("The dll is loaded successfully!!");
}

FUNC1Ptr FUNC1Lnk = (FUNC1Ptr)GetProcAddress(testInstance,"FUNC1");

if (!FUNC1tLnk)
{
    FreeLibrary(testInstance);
    printf("Error in getting function address!!\n");
}
else
{

    int *ret = 0;
    char *PIN = NULL;
    PIN = "test";

    int retVal1 = FUNC1Lnk( PIN, ret );

}
return 0;
}

PS。违规行为将被引用到free.c文件中:

        retval = HeapFree(_crtheap, 0, pBlock);
    if (retval == 0)
    {
        errno = _get_errno_from_oserr(GetLastError());
    }

}

1 个答案:

答案 0 :(得分:1)

FUNC1如何使用指针?可能不喜欢传递给它的int *为空。

试试这个(有一个实际的整数类型 - 不是指针 - 并取其地址):

int ret = 0;
char *PIN = NULL;
PIN = "test";

int retVal1 = FUNC1Lnk( PIN, &ret );