返回介绍

4.1 内存管理

发布于 2024-10-03 16:34:03 字数 768 浏览 0 评论 0 收藏 0

对于内存管理程序。程序员可能犯的错误是:

  • 释放一个内存块但继续引用其中的内容;(delete xxx; xxx=NULL;)
  • 分配一个内存块并使用其中未经初始化的内容;(memset)
  • 调用 realloc 对一个内存块进行扩展,因此原来的内容发生了存储位置的变化,但程序引用的仍是原来存储位置的内容;
  • 分配一个内存块后即 失去 了它,因为没有保存指向所分配内存块的指针;
  • 读写操作越过了所分配内存块的边界;
  • 没有对错误情况进行检查。(返回值判断)

示例: 复制一个不重叠的内存块

memcpy

//用预编译符号来分隔 DEBUG 与 RELEASE 版本,做到臃肿缓慢与整洁快速的融合,通常 DEBUG 时使用有额外检查的版本
void* memcpy(void* pvTo, void* pvFrom, size_t size)
{
  void* pbTo = (byte*)pvTo;
  void* pbFrom = (byte*)pvFrom;
  #ifdef DEBUG
  if(pvTo == NULL | | pvFrom == NULL)
  {
    fprintf(stderr, `Bad args in memcpy\n`);
    abort();
  }
  #endif
  while(size-->0)
    *pbTo++ == *pbFrom++;
  return(pvTo);
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文