ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

执行CreateProcess报非法访问

2022-04-16 02:31:06  阅读:187  来源: 互联网

标签:MSDN string 非法 CreateProcess 访问 内存 Unicode NULL


程序调用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截图:

 

 

标签:MSDN,string,非法,CreateProcess,访问,内存,Unicode,NULL
来源: https://www.cnblogs.com/kuaixue/p/16151732.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有