关于malloc()函数的使用

hit_zjb 2008-09-26 02:57:36
我在一段循环程序中使用了MALLOC()函数,第一次循环没有什么错误,第二次循环到MALLOC()后就出现了问题,表现为EXE程序运行失败,请高手指教!!谢谢
...全文
317 29 打赏 收藏 转发到动态 举报
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
yjjgg 2011-03-14
  • 打赏
  • 举报
回复
[Quote=引用楼主 hit_zjb 的回复:]
我在一段循环程序中使用了MALLOC()函数,第一次循环没有什么错误,第二次循环到MALLOC()后就出现了问题,表现为EXE程序运行失败,请高手指教!!谢谢
[/Quote]

楼主怎样解决这个问题的啊
季昂 2008-10-06
  • 打赏
  • 举报
回复
再补充一个,malloc后面,使用memset初始化一下,
还有pBuffer是不是一个char类型,别弄个int类型来malloc(2,3个)
季昂 2008-10-06
  • 打赏
  • 举报
回复
1,不知道你dwSize 的大小是多少?
你后面读文件时候,完全可能读冒了,释放时候可能产生问题,建议把1024换成dwSize - 1,
2,ERR是不是宏函数,是否破坏了程序逻辑?
3,尝试下不释放pBuffer,释放pbData看看,释放后pbData = NULL;pBuffer = NULL;
4,break后面最好释放下,虽然跟你的问题没有关系,但是不要留下野指针!
hit_zjb 2008-10-06
  • 打赏
  • 举报
回复
我还是没搞懂什么原因,感谢各位,我再研究下再请教
美丽海洋 2008-09-27
  • 打赏
  • 举报
回复
第一次循环 和 第二次有一部分变量是不同的
是不是这个影响了你的循环代码
once_and_again 2008-09-27
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 liaoweixiaoyu 的回复:]
break出循环前应该先free.




天正在等烟雨,而我在等你。
[/Quote]

只有引用的内容不允许回复!!
forfreedom 2008-09-27
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 hit_zjb 的回复:]
while(1)
{
pBuffer=malloc( dwSize );
printf("checking the error!\n");
pbData=pBuffer;
if (ReadFile(handlefile_,  // handle of file to read
pBuffer,          // handle of file to read
1024,              // number of bytes to read
&length,          // pointer to number of bytes read
NULL) == 0)        // pointer to structure for data
{
printf("Reading of file has problem!\n");
}



free(pBuffer);
[/Quote]
此pBuffer非彼pBuffer
hanyuxinting 2008-09-27
  • 打赏
  • 举报
回复
没释放内存~
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 Chiyer 的回复:]
是不是你的文件已经读完了??
[/Quote]
星羽 2008-09-27
  • 打赏
  • 举报
回复
是不是你的文件已经读完了??
liaoweixiaoyu 2008-09-27
  • 打赏
  • 举报
回复
break出循环前应该先free.
dota_1234 2008-09-27
  • 打赏
  • 举报
回复
。。。。是[Quote=引用 10 楼 adriano119 的回复:]
用MALLOC申请的内存用完后得FREE掉,否则会内存泄漏
相当于 NEW和DELETE
[/Quote]
wzg112 2008-09-27
  • 打赏
  • 举报
回复
在malloc()后,所有的出口都要free你的内存,不然导致内存泄漏
sys0002 2008-09-26
  • 打赏
  • 举报
回复
break;操作前调用free(pBuffer);
hit_zjb 2008-09-26
  • 打赏
  • 举报
回复
while(1)
{
pBuffer=malloc( dwSize );
printf("checking the error!\n");
pbData=pBuffer;
if (ReadFile(handlefile_, // handle of file to read
pBuffer, // handle of file to read
1024, // number of bytes to read
&length, // pointer to number of bytes read
NULL) == 0) // pointer to structure for data
{
printf("Reading of file has problem!\n");
}


dwError = WDU_Transfer(hDevice, dwPipeNum, cmd==1, 0, pBuffer,
dwSize, &dwBytesTransferred, SetupPacket, TRANSFER_TIMEOUT);

if (dwError)
ERR("ReadWritePipesMenu: WDU_Transfer() failed: error 0x%lx (\"%s\")\n",
dwError, Stat2Str(dwError));
else printf("2_Successfully_2!\n");

if (WriteFile(handlefile_, // handle to file to write to
pbData, // pointer to data to write to file
dwBytesTransferred, // number of bytes to write
&length,
NULL)) // pointer to number of bytes written
{
length+=dwBytesTransferred;
printf("\nThe datas have been preserved!\n");
}


if(*(pbData+63)==0x55)
{
printf("The phone is ringing!\n");
break;
}

}
free(pBuffer);

}
这个是被调用的循环程序,第一次进这个循环不会出错,第二次就不行了。再次感谢各位!
xianyuxiaoqiang 2008-09-26
  • 打赏
  • 举报
回复
free
biaozai06 2008-09-26
  • 打赏
  • 举报
回复
申请内存后没有释放,再次申请时出错!
pingzi_1119 2008-09-26
  • 打赏
  • 举报
回复
malloc()函数要跟free()函数一起用的,要不就会引起内存泄露
你检查一下,是不是分配的空间用完之后没有free啊
kkndciapp 2008-09-26
  • 打赏
  • 举报
回复
还是要看代码才知道原因
adriano119 2008-09-26
  • 打赏
  • 举报
回复
用MALLOC申请的内存用完后得FREE掉,否则会内存泄漏
相当于 NEW和DELETE
加载更多回复(9)

69,371

社区成员

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

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