C语言中的指针和内存泄漏

本文的内容包括:

1 导致内存破坏的指针操作类型;

2 在使用动态内存分配时必须考虑的检查点;

3 导致内存泄漏的场景。

有几种问题场景可能会出现,从而可能在完成生成后导致问题。在处理指针时,您可以使用本文中信息来避免许多问题。

一、未初始化的内存

已知P分配了10个字节,这10个字节可能包含垃圾数据,如 char *p = malloc(10);如果在对这个 P赋值前,某个代码尝试访问它,则可能会获得垃圾值,您的程序可能具有不可预测的行为,P可能具有您的程序从未有过得值。良好的习惯是始终结合使用memset和 malloc 分配内存,或者使用calloc.

char * p = malloc(10); memset(p,'\0',10)现在即使同一个代码尝试在对P赋值前访问它,该代码也能正确处理NULL值;

char * name =(char *)malloc(11);

memcpy(p,name,11);在本例子中,memecpy 操作尝试将11个字节写到P,而后者仅仅被分配了10个字节。memcpy函数是确保对可用字节数和所写入的字节数进行交叉核对。

二 内存读取越界

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

char name[20];

memcpy(name ,ptr,20);

三 内存泄漏

char * memoryArea =malloc(10);memoryArea = "properity"; newArea="itsnewarea"

char * newArea = malloc(10);

如果执行

memoryArea = newArea; 就会导致memoryArea以前的内存位置变成了孤立,它无法释放,导致内存泄漏。

在对指针赋值前,请确保内存位置不会变为孤立的。

 

 

首先,每当释放结构化得元素,而该元素又包含指向动态分配的内存位置的指针时,应首先遍历子内存位置,并从哪里开始释放,然后在遍历回父节点。

 在对指针赋值前,要确保没有内存位置会变为孤立的。

 

posted @ 2021-09-08 15:30  noticeable  阅读(67)  评论(0编辑  收藏  举报