执行CreateProcess报非法访问
程序调用CreateProcess总是报非法访问,类似这样调用:
1 | BOOL fSuccess = CreateProcess(NULL, command, NULL, NULL, TRUE, CREATE_NEW_CONSOLE, NULL, NULL, &si, &pi); |
调了半天不知道什么原因,看command等参数也是正确的,最后无意间将第二个参数lpCommandLine利用strdup进行了内存分配,居然正常了。惊喜之余,想起了MSDN,有一段话是这样写的:
The Unicode version of this function, CreateProcessW, can modify the contents of this string. Therefore, this parameter cannot be a pointer to read-only memory (such as a const variable or a literal string). If this parameter is a constant string, the function may cause an access violation.
由于我的工程是Unicode的,这段话的意思是说,如果是Unicode,该接口可能会修改字符串内容,因此,这个参数如果是只读内存的指针(例如:const变量或字面值常量),可能会引起内存非法访问。看到这里突然就明白了,因为我传入的是字面值常量(调试用的),才会导致这样的问题。
再次重申一点,做Windows开发,遇到问题一定要先查看MSDN,毕竟是微软提供的专业的资料。
附MSDN截图:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
2020-04-16 splunk公司的一道笔试题