执行CreateProcess报非法访问
2022/4/16 6:13:42
本文主要是介绍执行CreateProcess报非法访问,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
程序调用CreateProcess总是报非法访问,类似这样调用:
BOOL fSuccess = CreateProcess(NULL, command, NULL, NULL, TRUE, CREATE_NEW_CONSOLE, NULL, NULL, &si, &pi);
调了半天不知道什么原因,看command等参数也是正确的,最后无意间将第二个参数lpCommandLine利用strdup进行了内存分配,居然正常了。惊喜之余,想起了MSDN,怨自己没有第一时间查阅资料。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截图:
这篇关于执行CreateProcess报非法访问的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23增量更新怎么做?-icode9专业技术文章分享
- 2024-11-23压缩包加密方案有哪些?-icode9专业技术文章分享
- 2024-11-23用shell怎么写一个开机时自动同步远程仓库的代码?-icode9专业技术文章分享
- 2024-11-23webman可以同步自己的仓库吗?-icode9专业技术文章分享
- 2024-11-23在 Webman 中怎么判断是否有某命令进程正在运行?-icode9专业技术文章分享
- 2024-11-23如何重置new Swiper?-icode9专业技术文章分享
- 2024-11-23oss直传有什么好处?-icode9专业技术文章分享
- 2024-11-23如何将oss直传封装成一个组件在其他页面调用时都可以使用?-icode9专业技术文章分享
- 2024-11-23怎么使用laravel 11在代码里获取路由列表?-icode9专业技术文章分享
- 2024-11-22怎么实现ansible playbook 备份代码中命名包含时间戳功能?-icode9专业技术文章分享