【发布时间】:2013-06-28 14:04:51
【问题描述】:
Unhandled exception at 0x102e1cee (msvcr100d.dll) in filename.exe 0xC0000005: Access violation writing location 0x00416858 on.
调试指向行:
if (_putc_nolock(ch, f) == EOF)
代码
#else /* _UNICODE */
if (_putc_nolock(ch, f) == EOF)
#endif /* _UNICODE */
*pnumwritten = -1;
else
++(*pnumwritten);
}
在 output.c 中,我认为它链接在 Visual Studio 库中。我没有链接它。
我的代码是:
body=""
myFile=CreateFile("Sample.txt",FILE_APPEND_DATA,FILE_SHARE_WRITE,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
BufferNo=sprintf(body,"%.5f %[3].5f %[3].5f %[3].5f %[3].5f %[3].5f %[3].5f %[3].5f \n",a1,a2,a3,a4,a5,a6,a7,a8);
WriteFile(myFile,body,lstrlen(body),0,NULL);
CloseHandle(myFile);
我最初使用以下几行写入文件。我必须写标题。
HANDLE myFile=CreateFile("Sample.txt",GENERIC_WRITE,FILE_SHARE_WRITE,0,CREATE_NEW,FILE_ATTRIBUTE_NORMAL,0);
char* HeadingStr="a1 a2 a3 a4 a5 a6 a7 a8 \n";
WriteFile(myFile,HeadingStr,lstrlen(HeadingStr),0,NULL);
CloseHandle(myFile);
如何解决此错误?注意我有写权限。我也以管理员身份运行。 请注意,我已经在上一个代码中的使用之外定义了 BufferNo、myFile。
更新
我删除了body=""
现在我明白了
filename.exe triggered a breakpoint.
指向下面评论中提到的文件。
**EDIT**
现在,我有写作问题。 错误读取
Unhandled exception at 0x7c811384 in stabilo.exe: 0xC0000005: Access violation writing location 0x00000000 on.
并指向直线
WriteFile(myFile,body,lstrlen(body),0,NULL);
【问题讨论】:
-
body=""看起来很奇怪。您需要一个缓冲区来存储字符串。 -
需要更多信息。例如,
body是如何声明的?一般来说,你应该发一个SSCCE。 -
我删除了那个初始化。将主体定义为全局变量。现在,它说 filename.exe 触发了一个断点。并指向 { __debugbreak(); } 在文件 dbgrptt.c 中
-
全局
char *body分配给它的存储空间为零。让它,就像我的回答说的那样,char body[1000];,你可以写 1000 个字符。这可能超出了您的价值观所需要的范围。使用char *body只会给你一个 NULL 指针,这是运行时库中断言的原因。 -
为了将来参考,您的堆栈跟踪位于 msvcr100d.dll 中,这意味着您错误地调用了 C 标准库函数。所以不要看 WinAPI 函数,或者在你的问题标题中加上“WINAPI”。如果您知道这一点,这将是一个强烈的暗示,文件写入权限也不是问题。
标签: c++ c visual-studio-2010 winapi file-io