ReadFile异常0xC0000005

yunhaiC QQ654777694 2018-04-06 09:56:11
template <typename TYPE>
bool read(HANDLE hPipe,TYPE &data)
{
DWORD size=sizeof(TYPE),dwBytesRead=0;
bool ret=ReadFile(hPipe,&data,size,&dwBytesRead,NULL);
return ret;
}

bool readString(HANDLE hPipe,string &str)
{
DWORD size,dwBytesRead=0;
char *c;
bool ret=read(hPipe,(int &)size);
if(ret&&size>0 )
{
c=new char[size+1]; //这里报错0xC0000005
ret=ReadFile(hPipe,c,size,&dwBytesRead,NULL);
c[size]='\0';
str= string(c);
}
return ret;
}

大部分情况下都没问题,就是在读取大量次数之后,偶尔会出现空指针c

请教解决方法,感谢
...全文
784 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
「已注销」 2018-04-09
  • 打赏
  • 举报
回复
大问题没有,就是没有释放内存。不过代码太啰嗦了,合并成一个不就完了。还搞一个 template,但是 TYPE 还要强行转成 int * 是何道理?
bool readString(HANDLE hPipe, string &str)
{
	DWORD dwBytesRead;
	DWORD dwLength = 0;
	DWORD dwBuffer = sizeof(dwLength);
	BOOL bResult = ReadFile(hPipe, (void *)&dwLength, dwBuffer, &dwBytesRead, NULL);
	if (bResult && dwLength > 0)
	{
		char *psz = new char[dwLength + 1];
		bResult = ReadFile(hPipe, (void *)psz, dwLength, &dwBytesRead, NULL);
		str = string(psz);
		delete[] psz;
	}
	return bResult;
}
自信男孩 2018-04-08
  • 打赏
  • 举报
回复
new之后没有对其释放空间吧(delete) 尤其是在大量读的情况下,很有可能导致堆上的空间申请枯竭,导致new申请失败。建议根据需要是否在不需要的时候将new的空间释放掉(delete)
赵4老师 2018-04-08
  • 打赏
  • 举报
回复
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处,看不懂时双击下一行,直到能看懂为止
paschen 2018-04-06
  • 打赏
  • 举报
回复
出错时中断下来分析原因,检查内存有没申请成功,size的值是否正常之类
paschen 2018-04-06
  • 打赏
  • 举报
回复
bool ret=read(hPipe,(int &)size);建议改成:bool ret=read(hPipe,size);,检查read函数里检查读到的值等是否有问题
  • 打赏
  • 举报
回复
引用 1 楼 paschen 的回复:
出错时中断下来分析原因,检查内存有没申请成功,size的值是否正常之类
bool ret=read(hPipe,(int &)size); 这行size不正常 c=new char[size+1]; //这里报错0xC0000005 导致这行不正常 但是问题是,大部分情况下都是正常的
  • 打赏
  • 举报
回复
引用 1 楼 paschen 的回复:
出错时中断下来分析原因,检查内存有没申请成功,size的值是否正常之类
size不正常,但是该怎么解决呢朋友,因为我主要是用C#编程,也是偶尔用c,所以比较糊涂
内容概要:本文系统研究了线性模型预测控制(LMPC)与非线性模型预测控制(NMPC)在四旋翼无人机轨迹跟踪任务中的控制性能对比,基于Matlab/Simulink平台搭建完整的仿真控制系统。研究内容涵盖四旋翼无人机的动力学建模、状态空间表达、线性与非线性预测模型构建、滚动时域优化求解以及系统约束处理等关键技术环节,重点从轨迹跟踪精度、动态响应速度、系统稳定性及抗干扰能力等方面对两种控制策略进行对比分析,深入探讨线性化近似方法与精确非线性模型在实际控制效果上的差异,为无人机高性能飞控系统的设计提供理论支撑与仿真验证依据; 适合人群:具备自动控制原理、非线性系统理论、无人机动力学及Matlab/Simulink仿真基础的研究生、科研人员以及从事无人飞行器控制算法开发的工程技术人员; 使用场景及目标:① 掌握模型预测控制(MPC)在强非线性系统如四旋翼中的具体应用方法;② 理解LMPC与NMPC在建模假设、优化求解及控制性能上的本质差异;③ 为相关课题的仿真系统搭建、控制算法选型与性能评估提供实践参考;④ 支持课程设计、学位论文撰写或科研项目的算法验证与结果分析; 阅读建议:建议结合提供的Simulink仿真模型,深入剖析状态预测、代价函数设计与实时滚动优化的实现机制,对比不同飞行工况(如高机动轨迹)下的仿真结果,重点关注NMPC在复杂动态环境中的性能优势以及LMPC在计算效率与实时性方面的潜力,同时应注意非线性优化带来的计算负担问题及其对工程可实现性的影响。

70,038

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧