15深入理解C指针之---内存释放

  一、手动申请的内存,必须及时进行内存释放,否则容易造成内存泄露。主要代码形式为:

复制代码
 1 #include <stdio.h>
 2 #include <stdlib.h>
 3
 4 int main(int argc, char **argv)
 5 {
 6     int *ptrInt = (int *)malloc(sizeof(int) * 6);
 7     int size = 6;
 8     for(int i = 0; i < size; i++){
 9         *(ptrInt + i) = 90 + i;
10     }
11
12     for(int i = 0; i < size; i++){
13         printf("ptrInt[%d]: %d\t", i, *(ptrInt + i));
14     }
15     free(ptrInt);
16
17     return 0;
18 }
复制代码

  一般情况下,都会将内存释放后,将其赋值为NULL,会更加安全。

二、特殊情况:
    1、重复释放,大多是粗心无意识的,代码如下:    

int  *ptrInt = (int *)malloc(sizeof(int));
*ptrInt = 9;
free(ptrInt);
…
free(ptrInt);

    2、重复释放,主要是对指针与内存的关系不明了,其实ptrInt和ptrInt1指向同一块内存,不能也不需要释放两次,代码如下:  

int  *ptrInt = (int *)malloc(sizeof(int));
*ptrInt = 9;
int  *ptrInt1 = ptrInt;
free(ptrInt);
free(ptrInt1);

    3、内存释放的问题:

      1)、可能非常耗时,特别是存在结构体是更是如此;

      2)、可能增加应用程序大小;

      3)、可能导致程序运行时间加长;

      4)、可能会增加编程错误的概率;

      5)、可能会比不释放造成更多的问题;
    

posted @   叕叒双又  阅读(912)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示