科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件内存调试技巧:C 语言最大难点揭秘

内存调试技巧:C 语言最大难点揭秘

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

C 和 C 程序中的内存错误非常有害:它们很常见,并且可能导致严重的后果。来自计算机应急响应小组。

作者:Cameron Laird 来源:论坛整理 2007年10月27日

关键字:

  • 评论
  • 分享微博
  • 分享邮件
编码风格

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

  使这些格式元素成为您日常工作的一部分。可以使用各种方法解决内存问题:

  专用库

  语言

  软件工具

  硬件检查器在这整个领域中,我始终认为最有用并且投资回报率最大的是考虑改进源代码的风格。它不需要昂贵的代价或严格的形式;可以始终取消与内存无关的段的注释,但影响内存的定义当然需要显式注释。添加几个简单的单词可使内存结果更清楚,并且内存编程会得到改进。

  我没有做受控实验来验证此风格的效果。如果您的经历与我一样,您将发现没有说明资源影响的策略简直无法忍受。这样做很简单,但带来的好处太多了。

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章