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

david_shar 2007-01-19 10:45:02
我使用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]”处的未处理异常。

请问这是为什么?谢谢
...全文
208 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
OOPhaisky 2007-01-19
  • 打赏
  • 举报
回复
访问非法内存了吧?
你看看你的str相关操作的参数有没有问题?比如有没有设置字符串结束符‘\0’等等?
taodm 2007-01-19
  • 打赏
  • 举报
回复
貌似空指针操作。
ouyh12345 2007-01-19
  • 打赏
  • 举报
回复
跟踪一下,那句崩的
caocheng8230 2007-01-19
  • 打赏
  • 举报
回复
估计是你的代码的下标越界
北极猩猩 2007-01-19
  • 打赏
  • 举报
回复
我给你回了短消息了。
应该是传给strcmp的字符串指针中包含空指针。这个函数应该是在你的自定义函数中被调用的,因为Windows API中是不会调用strcmp函数的。
Wolf0403 2007-01-19
  • 打赏
  • 举报
回复
空指针。。应该还是比较好调的,

64,679

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧