设为首页 加入收藏

TOP

C语言最大难点揭秘[2]
2014-11-23 22:07:33 】 浏览:230
Tags:语言 最大 难点 揭秘


fp = fopen(filename, "r");
fscanf(fp, "%d", &key);
return key;
}



  fopen 的语义需要补充性的 fclose。在没有 fclose() 的情况下,C 标准不能指定发生的情况时,很可能是内存泄漏。其他资源(如信号量、网络句柄、数据库连接等)同样值得考虑。


  内存错误分配


  错误分配的管理不是很困难。下面是一个示例(请参见清单 3):



  清单 3. 未初始化的指针

void f2(int datum)
{
int *p2;


/* Uh-oh! No one has initialized p2. */
*p2 = datum;
...
}



  关于此类错误的好消息是,它们一般具有显著结果。在 AIX 下,对未初始化指针的分配通常会立即导致 segmentation fault 错误。它的好处是任何此类错误都会被快速地检测到;与花费数月时间才能确定且难以再现的错误相比,检测此类错误的代价要小得多。


  在此错误类型中存在多个变种。free() 释放的内存比 malloc() 更频繁(请参见清单 4):



  清单 4. 两个错误的内存释放

/* Allocate once, free twice. */
void f3()
{
char *p;


p = malloc(10);
...
free(p);
...
free(p);
}


/* Allocate zero times, free once. */
void f4()
{
char *p;


/* Note that p remains uninitialized here. */
free(p);
}




】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇C语言最大难点揭秘[1] 下一篇C语言最大难点揭秘[3]

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目