首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

高分求解 VS.net中的内存访问冲突有关问题,分数不够再加!

2012-02-15 
高分求解VS.net中的内存访问冲突问题,分数不够再加!!我使用VS.net的WIN32框架程序,在添加自定义函数以后,

高分求解 VS.net中的内存访问冲突问题,分数不够再加!!
我使用VS.net的WIN32框架程序,在添加自定义函数以后,编译连接没有问题,运行则会出现“0x0045fa20   处未处理的异常:   0xC0000005:   读取位置   0x00000000   时发生访问冲突”问题。
int   APIENTRY   _tWinMain(HINSTANCE   hInstance,
                                          HINSTANCE   hPrevInstance,
                                          LPTSTR         lpCmdLine,
                                          int               nCmdShow)
{
  //   TODO:   在此放置代码。
MSG   msg;
HACCEL   hAccelTable;

//   初始化全局字符串
LoadString(hInstance,   IDS_APP_TITLE,   szTitle,   MAX_LOADSTRING);
LoadString(hInstance,   IDC_EVER3D,   szWindowClass,   AX_LOADSTRING);
MyRegisterClass(hInstance);

//   执行应用程序初始化:
if   (!InitInstance   (hInstance,   nCmdShow))  
{
return   FALSE;
}

hAccelTable   =   LoadAccelerators(hInstance,   (LPCTSTR)IDC_EVER3D);

//   主消息循环:
while   (GetMessage(&msg,   NULL,   0,   0))  
{
if   (!TranslateAccelerator(msg.hwnd,   hAccelTable,   msg))  
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}

return   (int)   msg.wParam;
}

BOOL   InitInstance(HINSTANCE   hInstance,   int   nCmdShow)
{
      HWND   hWnd;

      hInst   =   hInstance;   //   将实例句柄存储在全局变量中

      hWnd   =   CreateWindow( "Ever3D ",   "CarDemo.exe ",  
WS_OVERLAPPEDWINDOW   |  
WS_VISIBLE   |  
WS_SYSMENU   |
WS_CLIPCHILDREN   |
WS_CLIPSIBLINGS,
CW_USEDEFAULT,  
0,  
CW_USEDEFAULT,  
0,  
NULL,   NULL,  
hInstance,  
NULL);

      if   (!hWnd)
      {
            return   FALSE;
      }

      ShowWindow(hWnd,   nCmdShow);
      UpdateWindow(hWnd);

      return   TRUE;
}

回调函数为WndProc,其中添加了WM_CREATE消息,并在其中进行初始化工作。
相应代码部分如下:
LRESULT   CALLBACK   WndProc(HWND   hWnd,   UINT   message,   WPARAM   wParam,   LPARAM   lParam)
{
    ...
    switch   (message)  
{
case   WM_CREATE:
hdc   =   GetDC(hWnd);
g_hdc   =   hdc;

SetupPixelFormat(hdc);

glRC   =   wglCreateContext(hdc);
wglMakeCurrent(hdc,glRC);

InitOpenGL();

if(!   InitData())
{
Uninitialize();
wglMakeCurrent(hdc,glRC);
wglDeleteContext(glRC);
PostQuitMessage(0);
}

break;
}

其中的未知函数都已经在外部有了定义了。

使用调试跟踪错误,发现问题出在strcmp函数的ASM代码
                CODESEG
                public     strcmp


strcmp     proc
                .FPO         (   0,   2,   0,   0,   0,   0   )
                mov           edx,[esp   +   4]       ;   edx   =   src
                mov           ecx,[esp   +   8]       ;   ecx   =   dst
                test         edx,3
                jnz           short   dopartial
                align       4
dodwords:
                mov           eax,[edx]
                ...
中“mov           eax,[edx]”处的未处理异常。

请问这是为什么?谢谢

[解决办法]
估计是你的代码的下标越界
[解决办法]
跟踪一下,那句崩的
[解决办法]
貌似空指针操作。
[解决办法]
访问非法内存了吧?
你看看你的str相关操作的参数有没有问题?比如有没有设置字符串结束符‘\0’等等?
[解决办法]
空指针。。应该还是比较好调的,
[解决办法]
我给你回了短消息了。
应该是传给strcmp的字符串指针中包含空指针。这个函数应该是在你的自定义函数中被调用的,因为Windows API中是不会调用strcmp函数的。

热点排行