malloc动态数组问题

scofic 2009-08-29 10:20:17
我的问题在源代码里提出,请大家给予建议

#include "stdio.h"
#include "stdlib.h"
#include "conio.h"

int main(int argc, char* argv[])
{
int i = 1;//定义下标
char *pInputFir = (char*)malloc(sizeof(char)*i);//初始化指针并分配动态内存
//容错保护
if (NULL == pInputFir)
{
return 1;
}
char *pInputSec = NULL;//定义临时数据指针
//开始操作
do
{
*(pInputFir+i-1) = getche();//接收实际数据

//第一次判断是否为回车
if ('\r' == *pInputFir || '\n' == *pInputFir)
{
//给下标值初始化0
i = 0;
break;
}
//大小自增
i++;
pInputSec = (char*)malloc(sizeof(char)*i);/*给临时指针分配比上一个空间大1的内存空间,如果内存不足怎么办?*/
//临时空间容错保护
if (NULL == pInputSec)
{
return 1;
}

/*暂时以临时空间作为数据存储空间进行备份,但是每次备份都是遍历,那有什么有效办法提高效率?*/
for (int j = 0; j < i; j++)
{
*(pInputSec + j) = *(pInputFir + j);
}
free(pInputFir);//释放实际内存

//实际操作指针指向临时内存
pInputFir = pInputSec;
}
while ('\r' != *(pInputSec+i-2) && '\n' != *(pInputSec+i-2));//当回车换行时结束

//给予结束符
if(0 == i)
*pInputFir = '\0';
else
*(pInputFir+i-2) = '\0';

//输出测试
printf("\n%s\n", pInputFir);

//释放实际操作内存和指针
free(pInputFir);
// //释放临时内存
/* free(pInputSec);在这里如果释放临时内存将会引起程序崩溃,因为正在使用当中的内存不应该被释放,那么我临时内存想释放掉如何做?总不能无缘无故一直占用资源吧?*/
pInputFir = NULL;
pInputSec = NULL;
return 0;
}

...全文
290 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
scofic 2009-08-30
  • 打赏
  • 举报
回复
我想我可以再内存不足的情况下去调虚拟内存,问题基本上解决了 我这个帖子10点就发了 刚刚写完剩下的上来看 发现到半夜才有人回复,谢谢你了 给分结贴 呵呵
scofic 2009-08-30
  • 打赏
  • 举报
回复
已经试了 可以 谢谢你 至于效率我还需要时间去测试 那么内存申请的时候不足如何解决?
mstlq 2009-08-30
  • 打赏
  • 举报
回复
pInputSec = (char*)malloc(sizeof(char)*i);/*给临时指针分配比上一个空间大1的内存空间,如果内存不足怎么办?*/

大1不好玩,直接用两倍大小……
新空间没用完之前,就别再申请了……
mstlq 2009-08-30
  • 打赏
  • 举报
回复
看错类型了……
memcpy(pInputSec,pInputFir,i);
scofic 2009-08-30
  • 打赏
  • 举报
回复
memcpy(pInputSec,pInputFir,i*sizeof(int));//??我的是字符型,是否大哥打错还是一定是int?
mstlq 2009-08-30
  • 打赏
  • 举报
回复
memcpy(pInputSec,pInputFir,i*sizeof(int));
scofic 2009-08-30
  • 打赏
  • 举报
回复
free的问题解决了 多谢两位仁兄 我也发现了 那么还有剩下的2个问题呢? 遍历太慢 是否有好办法备份数据? 还有就是每次都申请内存,内存不足怎么办?直接容错退出?
mstlq 2009-08-30
  • 打赏
  • 举报
回复
楼主请自己ctrl+f搜索一下……
您用了2个malloc
同时也有2个free

一切都很和谐……
最后那第三个free多余了,原因请参考1楼说法
lin_style 2009-08-30
  • 打赏
  • 举报
回复
pInputFir = pInputSec;

这两个指的内容不是都一样吗?free两次自然出错。。

70,023

社区成员

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

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