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以前的内存位置变成了孤立,它无法释放,导致内存泄漏。
在对指针赋值前,请确保内存位置不会变为孤立的。
首先,每当释放结构化得元素,而该元素又包含指向动态分配的内存位置的指针时,应首先遍历子内存位置,并从哪里开始释放,然后在遍历回父节点。
在对指针赋值前,要确保没有内存位置会变为孤立的。