WEB开发网
开发学院操作系统Linux/Unix 内存调试技巧 阅读

内存调试技巧

 2008-11-13 08:31:57 来源:WEB开发网   
核心提示: 内存编程的策略勤奋和自律可以让这些错误造成的影响降至最低限度,下面我们介绍一下您可以采用的几个特定步骤;我在各种组织中处理它们的经验是,内存调试技巧(5),至少可以按一定的数量级持续减少内存错误,编码风格编码风格是最重要的,我还从没有看到过其他任何作者对此加以强调,影响资源(特别是内存)的

内存编程的策略

勤奋和自律可以让这些错误造成的影响降至最低限度。下面我们介绍一下您可以采用的几个特定步骤;我在各种组织中处理它们的经验是,至少可以按一定的数量级持续减少内存错误。

编码风格

编码风格是最重要的,我还从没有看到过其他任何作者对此加以强调。影响资源(特别是内存)的函数和方法需要显式地解释本身。下面是有关标头、注释或名称的一些示例(请参见清单 6)。

清单 6. 识别资源的源代码示例

  /********
   * ...
   *
   * Note that any function invoking protected_file_read()
   * assumes responsibility eventually to fclose() its
   * return value, UNLESS that value is NULL.
   *
   ********/
  FILE *protected_file_read(char *filename)
  {
    FILE *fp;
    fp = fopen(filename, "r");
    if (fp) {
    ...
    } else {
    ...
    }
    return fp;
  }
    /*******
   * ...
   *
   * Note that the return value of get_message points to a
   * fixed memory location. Do NOT free() it; remember to
   * make a copy if it must be retained ...
   *
   ********/
  char *get_message()
  {
    static char this_buffer[400];
      ...
    (void) sprintf(this_buffer, ...);
    return this_buffer;
    }
    /********
   * ...
   * While this function uses heap memory, and so
   * temporarily might expand the over-all memory
   * footprint, it properly cleans up after itself.
   *
   ********/
    int f6(char *item1)
  {
    my_class c1;
    int result;
      ...
    c1 = new my_class(item1);
    ...
      result = c1.x;
    delete c1;
    return result;
  }
  /********
   * ...
   * Note that f8() is documented to return a value
   * which needs to be returned to heap; as f7 thinly
   * wraps f8, any code which invokes f7() must be
   * careful to free() the return value.
   *
   ********/
  int *f7()
  {
    int *p;
    p = f8(...);
    ...
    return p;
  }

上一页  1 2 3 4 5 6 7 8  下一页

Tags:内存 调试 技巧

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接