内存读取越界 (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 所示。它无法释放,因为