C++ 访问冲突读取位置0x00000002

C++ 访问冲突读取位置0x00000002,c++,visual-studio-2010,visual-c++,exception-handling,C++,Visual Studio 2010,Visual C++,Exception Handling,我的代码出现以下错误: CChatClient.exe中0x00b09736处的未处理异常:0xC0000005:访问冲突读取位置0x00000002 我将无法发布整个代码,因此粘贴错误出现的部分代码 > static void run_thread(void *args) { CThreadRunnable *pRunnable = static_cast<CThreadRunnable*>(args); int* actual_arg

我的代码出现以下错误:

CChatClient.exe中0x00b09736处的未处理异常:0xC0000005:访问冲突读取位置0x00000002

我将无法发布整个代码,因此粘贴错误出现的部分代码

> static void run_thread(void *args)
    {
        CThreadRunnable *pRunnable = static_cast<CThreadRunnable*>(args);
        int* actual_arg = (int *)args;
        if (*actual_arg)
        {
            PRINTD "value of arg=" << *actual_arg << std::endl;
            pRunnable->run(actual_arg);
        }
    }
在第5行,运行时异常即将出现。 我无法在visual studio 10上调试此错误。
有人能帮忙吗,如何在VisualStudio编译器上调试这种错误

谢谢,
Ravindra Gupta进入调试->异常。当选中系统运行时异常的两个复选框时,名称可能是其他名称,我不记得确切的名称

if (*actual_arg)
如果这一行导致了错误,那么实际的_arg是2,您尝试将其作为指针处理并取消引用它。您不允许偷看2的内存地址并获得访问冲突

猜猜看,我会说您将变量而不是它的地址传递给函数

编辑:

你的签名错了

static void run_thread(void *args)
会是

static DWORD run_thread(void* args)

在此处添加导致此错误的代码。看起来像空指针。尽管这是我在没有代码的情况下所能说的。关于你所写的代码问题的问题必须在问题本身中描述具体的问题,并包括重现问题的有效代码。请参见SSCCE.org以获取指导。您可以发布创建线程的代码吗?您的代码没有多大意义。args要么指向一个CThreadRunnable,要么指向一个int-不能两者都是。然而,你继续向前,并把它两个方面。这是做什么?这对OP有什么帮助?为什么OP要这样做?请有人帮助,如何在VisualStudio编译器上调试这种错误。如果位置未知,这正是调试崩溃的方法。问题由OP.HANDLE hThreadHndr=CreateThread NULL,0,LPTHREAD\u START\u例程和CChatClient::run\u thread,LPVOIDSEND,0,NULL;这就是我称之为run_线程的方式。@Ravindra如果你必须施放,你就做错了。