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

本文探讨了C语言中可能导致内存破坏的指针操作,包括未初始化的内存、内存读取越界和内存泄漏的场景。建议在使用动态内存分配时结合memset或calloc初始化,注意内存边界检查,以及在赋值指针前防止内存位置孤立,以防止内存泄漏和程序不稳定。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文的内容包括:

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以前的内存位置变成了孤立,它无法释放,导致内存泄漏。

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

  • memoryArea->
              
                                                                                                                                 newarea
              

     

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

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

未完待续。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值