我的服务器运行一段时间后,在new一个对象时,或者new int[5],凡是申请内存的地方有异常。
出现“Unhandled exception in Server.exe (MSVCRT.DLL):0xC0000005 Access Violation”
异常,请问会是什么原因导致的呢?(我用F5调试定位的)

解决方案 »

  1.   

    那肯定是内存泄漏了。检查你的内存相关操作。比如:内存释放,指针是否释放,释放要置NULL,数组越界等等。。
      

  2.   

    还有是否跟多线程有关,我写了个测试程序,就是开3个线程,new 一段内存,然后释放delete,过了一会儿就会出现内存读或者写错误。
      

  3.   

    内存泄露,指针不用的时候记得要释放和置NULL.
      

  4.   

    #include <windows.h>
    #include <stdio.h>void Thd(void)
    {
        while (1)
        {
            char *buf = new char[4096];
            delete [] buf;
            buf = 0;
            Sleep(100);
            printf("thrd \n");
        }
    }int main(void)
    {
        for(int i=0; i<4; i++)
            CreateThread(NULL,NULL,(LPTHREAD_START_ROUTINE)Thd, NULL, NULL, NULL);
        while(1)
        {
            printf("main \n");
            Sleep(5000);
        }
        return 1;
    }
      

  5.   

    0 和 NULL 有区别吗?
      

  6.   

    1.试着把printf("thrd \n");删掉看看
    2.vc是pack几,建议打包pack5试一下
    3.关注!
      

  7.   

    void Thd(void)?
    线程函数原型不对,造成堆栈被破坏?
      

  8.   

    DWORD WINAPI ThreadProc(
      LPVOID lpParameter
    );
      

  9.   

    #include <windows.h>
    #include <stdio.h>DWORD WINAPI Thd(LPVOID)
    {
        while (1)
        {
            char *buf = new char[4096];
            delete [] buf;
            buf = 0;
            Sleep(100);
            printf("thrd \n");
        }
        return 0;
    }int main(void)
    {
        for(int i=0; i<4; i++)
            CreateThread(NULL,NULL,Thd, NULL, NULL, NULL);
        while(1)
        {
            printf("main \n");
            Sleep(5000);
        }
        return 1;
    }