傻大方


首页 > 人文 >

内存|解密C语言中的指针和内存泄漏,这些陷阱一定要避开!( 三 )



按关键词阅读:


这里的正确实现应该为:
free( memoryArea->newArea);
free(memoryArea);
返回值的不正确处理
有时 , 某些函数会返回对动态分配的内存的引用 。 跟踪该内存位置并正确地处理它就成为了 calling 函数的职责 。
char *func ( )
{
return malloc(20); // make sure to memset this location to ‘\0’…
}
void callingFunc ( )
{
func ( ); // Problem lies here
}
在上面的示例中 , callingFunc() 函数中对 func() 函数的调用未处理该内存位置的返回地址 。 结果 , func() 函数所分配的 20 个字节的块就丢失了 , 并导致了内存泄漏 。
内存|解密C语言中的指针和内存泄漏,这些陷阱一定要避开!
本文图片

归还您所获得的
在开发组件时 , 可能存在大量的动态内存分配 。 您可能会忘了跟踪所有指针(指向这些内存位置) , 并且某些内存段没有释放 , 还保持分配给该程序 。
始终要跟踪所有内存分配 , 并在任何适当的时候释放它们 。 事实上 , 可以开发某种机制来跟踪这些分配 , 比如在链表节点本身中保留一个计数器(但您还必须考虑该机制的额外开销) 。
访问空指针
访问空指针是非常危险的 , 因为它可能使您的程序崩溃 。 始终要确保您不是 在访问空指针 。
没有躲过的坑--指针(内存泄露)
C++被人骂娘最多的就是指针 。
夜深人静的时候 , 拿出几个使用指针容易出现的坑儿 。 可能我的语言描述有些让人费劲 , 尽量用代码说话 。
通过指向类的NULL指针调用类的成员函数
试图用一个null指针调用类的成员函数 , 导致崩溃:
#include
using namespace std;
class Avoid set(int x) int get() const };
int main()
为什么会这样?
通过非法指针调用函数 , 就相当于给函数传递了一个指向函数的非法指针!
但是为什么pA2->dumb()会成功呢?
因为导致崩溃的是访问了成员变量!!
使用已经释放的指针
struct X;
int foo(){
struct X *pX;
pX = (struct X *) malloc(sizeof (struct X));
pX->data = https://new.qq.com/omn/20201026/10;
free(pX);
...return pX->data;
}
使用未初始化的指针
如果你这样写 , 编译器会提示你使用了未初始化的变量p 。
void foo A()
{
int *p;*p = 100;
}
那么如果我释放一个初始化的指针呢?
void foo B()
{
int *p;
free(p);
}
结果是一样的!!
释放已经释放的指针
直接看看代码:
void foo A()
{
char*p;
p = (char*)malloc(100);
cout
free(p);
cout
free(p);
}
这样的问题也许不会立即使你的程序崩溃 , 那样后果更加严重!!
没有调用子类的析构函数
之前讲过 , 父类的析构函数最好声明为虚!!
ParentClass *pObj = new ChildClass;
...delete pObj;
上述代码会造成崩溃 , 如果父类的析构函数不声明为虚 , 那么不会调用继承类的析构函数 , 造成内存泄露 。
内存溢出
当我们拷贝字符串的时候 , 我们常常会用到 memcpy函数 。 这里特别需要注意的就是字符串结尾的null字符:
char *p = (char *)malloc(strlen(str));
strcpy(p, str);
为了躲过这个坑 , 只需要把 strlen(str) 改为 strlen(str)+1 。
内存|解密C语言中的指针和内存泄漏,这些陷阱一定要避开!
本文图片

总结
本文讨论了几种在使用动态内存分配时应该避免的陷阱 。 要避免内存相关的问题 , 良好的习惯是:


稿源:(程序猿虎牙参上)

【】网址:http://www.shadafang.com/c/hn102YU2H2020.html

标题:内存|解密C语言中的指针和内存泄漏,这些陷阱一定要避开!( 三 )


上一篇:固态硬盘|电脑固态硬盘应该怎么选?三星PM981,几秒开机不是梦!

下一篇:赛睿rival 3|赛睿Rival 3 Wireless电竞鼠标评测 超长续航


人文

年薪制| 年薪制要来了吗?事业单位职工收入或将有大变化!

阅读(22)

近日,人社部组织实施人才服务专项行动,推进高校、科研院所薪酬制度改革。落实高层次人才工资分配激励政策,鼓励事业单位对高层次人才实行年薪制、协议工资制、项目工资等灵活多样的分配形式。鼓励事业单位对高层次人才实行年薪制、协议工资制、项目工资等灵...

人文

#quot#六旬男子足底黑痣会长大 检查发现是恶性肿瘤

阅读(10)

本年60 岁的陈师长教师比来有些忧?。本来,三年前他的左脚底足跟邻近长了一颗黄豆大年夜小、凸起的黑" 痣"。一年前开端,这颗" 痣" 有逐渐长大年夜之势,伴有些许压痛,于是陈师长教师按期到家邻近的修脚店把这颗" 痣" 磨平,...

人文

格萨尔|《藏地奇兵》石渠开机 穿越藏地最后秘境热血探险

阅读(15)

由沃星影业、拉近影业、拉近沃星影业出品,成都影视硅谷集团、青岛东望影业联合出品的电影《藏地奇兵》于10月12日在四川石渠正式开机。该片由著名演员秦岚担任出品人兼艺术总监,张楚晗担任总制片人,张著麟、李希杰、温子迅执导,魏千翔、屈菁菁、邢瀚卿、吴...

人文

凤眼看房长沙|长三角多市出台调控政策 房企拿地热情不减

阅读(17)

回望过去一段时间,不仅是宁波,整个长三角已是房企必争之地。今年融资环境稍有宽松后,大小房企集体携金杀往长三角,土拍市场屡现高溢价,即便多地出手调控,仍有地王出现。楼市也在市场情绪助推下迅速反弹。“近年来三四线城市房产饱和、风险积聚,标杆企业...

人文

时尚探究社成都街拍:图集分享

阅读(43)

这个夏天阴阳色也太好看了吧~又个性,又显白的发色,就算搭配学院风也一点都不突兀。一看就是经常健身的小姐姐,这个身材曲线真的羡慕了~不要太美~...

人文

Tina|卫衣 + 半裙,照着穿好看爆了 !

阅读(21)

卫衣+半裙的搭配,属实是显胖王者,它要是称第二,那也是太谦虚了。当你挑选的裙子也很宽松时,穿上它就是灾难本身,转过身去看背后,Tina都想落泪,这五五分的身材是真实存在的吗?明明是同款卫衣,却比旁边穿裤子的look,腿长短了好多!不过小可爱们不用害...

人文

怪我碍你|十月再见,十一月你好,释然过往,砥砺向前

阅读(12)

逝去的时光中,总有一些东西会在心中成为永恒,那么,就铭记那些美好吧,心中有阳光,充满正能量,微笑着面对生活;也会有些事情成为遗憾,有些心愿没能实现,但也不要气馁,更不要抱怨,笑看过往,努力过好当下和明天,不胡思乱想,不执着于过去。愿所有的真...

人文

午间时刻《欢喜猎人》要播了吗?包贝尔贾玲再次合作,携手《欢喜密探》原班人马回归

阅读(35)

网剧《欢乐密探》就是一部不错的喜剧作品,而《欢乐猎人》是《欢乐密探》原班人马打造的第二部影视作品,所以有很多人都等着可以早点看到这部剧,然则在《欢乐猎人》拍了两年今后,一向没有播出,大年夜家也都等得异常焦急。不过,有传言说《欢乐猎人》这部电...

人文

社会【观点】医改进程迟缓的原因及破解之策

阅读(20)

1供给侧改革进展迟缓大年夜实际来看,医疗供给侧改革在社会办医、医务人员自由执业、公立病院去行政化三个方面并没有太多本质性的进展,这也是我国医改未能有大年夜冲破的重要原因。1.1社会办医成长迟缓成长社会办医,不仅是实际须要,也是一种策略。在公立病...