频道直达 - 专题 - 新闻 - 技巧 - 组网 - 开发 - 安全 - web编程 - 图像 - 操作系统 - 数据库 - 教育 - 旅游 - 健康 - 时尚 - 驱动 - 软件 - 游戏 - 多媒体 - ERP - 讨论组

精华:C++编程新手错误语录(续一)

来源:PConline 作者:宋宝华 出处:巧巧读书 2005-11-01 进入讨论组
上一页 1 2 3 4 5 6 下一页 
QQRead:http://www.qqread.com/cpp/i200429003.html
  规则3 什么样的程序具备需要动态申请内存的特质呢?包含两种情况:
  (1)不知道有多少要来,来了的又走了
  不明白?这么说吧,譬如你正在处理一个报文队列,收到的报文你都存入该队列,处理完队列头的报文后你需要取出队列头的元素。

  你不知道有多少报文来(因而你不知道应该用多大的报文数组),这些来的报文处理完后都要走(释放),这种情况适合用malloc和free。

  (2)慢慢地长大
  譬如你在资源受限的系统中编写一文本编辑器程序,你怎么做,你需要这样定义数组吗?

  char str[10000];

  不,你完全不应该这么做。即使你定义了一个10000字节大的字符串,用户如果输入10001个字符你的程序就完完了。

  这个时候适合用malloc,因为你根本就不知道用户会输入多少字符,文本在慢慢长大,因而你也应慢慢地申请内存,用一个队列把字符串存放起来。

  那么是不是应该这样定义数据结构并在用户每输入一个字符的情况下malloc一个CharQueue空间呢?

typedef struct tagCharQueue
{
char ch;
struct tagCharQueue *next;
}CharQueue;


  不,这样做也不对!这将使每个字符占据“1+指针长度”的开销。

  正确的做法是:

typedef struct tagCharQueue
{
char str[100];
struct tagCharQueue *next;
}CharQueue;


  让字符以100为单位慢慢地走,当输入字符数达到100的整数倍时,申请一片CharQueue空间。

更多文章 更多内容请看C/C++技术专题Java编程开发手册专题,或进入讨论组讨论。
上一页 1 2 3 4 5 6 下一页 
收藏此文】【 】【打印】【关闭
相关图文阅读
频道图文推荐
健 康 咨 询
时 尚 咨 询
巧巧读书宗旨
相关专题
讨论组问题推荐
站内各频道最新更新文档
站内最新制作专题
热门关键字导读
Photoshop教 程照片处理 照片制作 PS快捷键 抠图
计 算 机 故 障XP系统修复
艺 术 与 设 计设计 流媒体 设计欣赏 边框
计 算 机 安 全ARP
站内频道文章精选
巧巧电脑频道编辑信箱  告诉我们您想看的专题或文章