background image

    内存读取越界 (overread) 是指所读取的字节数多于它们应有的字节数。这个问题并不太严

重,在此就不再详述了。下面的代码提供了一个示例。

char *ptr = (char *)malloc(10);

char name[20] ;
memcpy ( name,ptr,20); // Problem begins here

    在本例中,memcpy 操作尝试从 ptr 读取 20 个字节,但是后者仅被分配了 10 个字节。这

还会导致不希望的输出。

 

内存泄漏

    内存泄漏可能真正令人讨厌。下面的列表描述了一些导致内存泄漏的场景。

重新赋值

 

我将使用一个示例来说明重新赋值问题。

char *memoryArea = malloc(10);
char *newArea = malloc(10);

这向如下面的图

 4 所示的内存位置赋值。

 4. 内存位置

memoryArea 和 newArea 分别被分配了 10 个字节,它们各自的内容如图 4 所示。如果某人

执行如下所示的语句(指针重新赋值)

……

memoryArea = newArea; 

则它肯定会在该模块开发的后续阶段给您带来麻烦。

 

在 上 面 的 代 码 语 句 中 , 开 发 人 员 将

  memoryArea  指 针 赋 值 给   newArea  指 针 。 结 果 ,

memoryArea 以前所指向的内存位置变成了孤立的,如下面的图 5 所示。它无法释放,因为