我正在尝试在Windows上创建一个套接字以连接到服务器。
我正在使用msdn网站上的代码,即winsock客户端代码。
(链接:msdn.microsoft.com/en-us/library/windows/desktop/ms737591(v=vs.100).aspx)
在任何情况下,当我尝试调试所述代码时,我收到错误消息:
Unhandled exception at 0x58a714cf (msvcr100d.dll) in Application.exe: 0xC0000005: Access violation reading location 0x00000032.
它询问我是否要中断或继续,如果我继续相同的错误消息只是不断弹出。如果我按下break,它会将我带到输出文件中的第1643行。
简单地说,我不知道如何使其发挥作用,我很感激任何给予的帮助。
编辑:
对迄今为止给出的所有评论的答复:
output.c中的周围相关代码是:
if (flags & (FL_LONG|FL_WIDECHAR)) {
if (text.wz == NULL) /* NULL passed, use special string */
text.wz = __wnullstring;
bufferiswide = 1;
pwch = text.wz;
while ( i-- && *pwch )
++pwch;
textlen = (int)(pwch - text.wz);
/* textlen now contains length in wide chars */
} else {
if (text.sz == NULL) /* NULL passed, use special string */
text.sz = __nullstring;
p = text.sz;
while (i-- && *p) //THIS IS WHERE IT BREAKS
++p;
textlen = (int)(p - text.sz); /* length of the string */
}
这不是我编写的代码,而是已存在的固有代码。
编辑NR 2: 这是一个显示我的调用堆栈的打印屏幕。 我没有10个声誉,所以我无法显示图像,所以这里是图像的链接:
在它上面你可以看到我的调用堆栈
答案 0 :(得分:2)
文件output.c
具有处理printf
函数族的代码。
此处出现错误的原因可能是您的代码中的printf
函数调用格式不正确。也许您指定了无效的打印格式或者没有提供足够的参数。
当程序崩溃时,单击Break并在调试窗口中查看调用堆栈,以查看代码中的位置 - 调用函数以及使用什么参数。
我怀疑您正在尝试打印NULL字符串或其他内容。找到printf
调用后(如果是这样),编辑你的问题以显示源代码部分和/或使用调试器检查变量使用函数的参数并确保它们是一切都正确。
如果没有看到您编写的代码,在崩溃的位置,就无法给出更准确的答案。
答案 1 :(得分:1)
或者您可以将空字符串插入CString.format
,如下所示:
CString str;
str.format("%s"); //A null string
应该在哪里
str.format("%s",mes);
其中mes
为char mes[20]
,例如
或任何其他变量
所以关键是CString.format
或Printf
祝你好运。