c-面试中遇到的指针释放问题

问题描述

面试中遇到的指针释放问题

老师问我,为什么定义一个变量,比如int a;用完就可以不用管,但是定义一个指针,用完了却要释放空间?我的回答是,因为指针指向的是一个地址。。。被赤裸裸嘲笑。。网上百度一番,也没看出个所以然。求大神帮忙解答

解决方案

因为int a定义的变量在堆栈上,堆栈在函数调用完成后自动清栈。new / malloc定义的在堆上,所以要自己释放。

解决方案二:

1)定义一个指针并不需要释放空间

2)只有用指针接收动态分配的内存(堆空间),才需要释放空间
原因是释放空间,内存可以再次分配,循环利用。
否则,堆内存就会一直得不到回收,
这样会导致,内存各种各样的问题。

解决方案三:

变量a跟指针本身都在栈上,函数执行完成后操作系统自动清除了。但是指针所指的堆内存数据不会清除,必须由程序员自己释放。不清除就会造成内存泄漏。

解决方案四:

这道题简单看就是说指针指向一段内存,如果用完之后不去释放并指向空,则会变成野指针,而局部变量的生命周期则是与函数一致

解决方案五:

1)定义一个指针并不需要释放空间

2)只有用指针接收动态分配的内存(堆空间),才需要释放空间
原因是释放空间,内存可以再次分配,循环利用。
否则,堆内存就会一直得不到回收,
这样会导致,内存各种各样的问题。

解决方案六:

栈里面的东西一般不要释放吧,不知道对不对

解决方案七:

局部变量存储在栈中,随栈的销毁而自动回收;指针指向的空间是在堆中动态分配的,不会自动回收,如果不手动释放会造成内存泄漏

时间: 2024-12-19 05:06:50

c-面试中遇到的指针释放问题的相关文章

malloc-C语言中的字符指针操作问题,如何释放字符指针空间?

问题描述 C语言中的字符指针操作问题,如何释放字符指针空间? 源码如下: #include #include #include void main() { char s1; char *s2 = "bbb"; char *s3 = "ccc"; s1 = (char)malloc(sizeof(s2)); strcpy(s1, s2); strcat(s1, s3); //free(s2); //free(s3); printf("%s ", s

C语言中指针释放问题,函数free()的使用。

问题描述 C语言中指针释放问题,函数free()的使用. 各位大虾们,C语言中如果不是指向使用malloc,realloc.calloc动态申请的内存的指针,是不是就不需要free()释放该指针了呢? 比如说申请了一个指向结构体的指针, 或者是指向一个整型变量的指针.谢谢各位大虾. 解决方案 如果你没用*alloc *函数的话,你应该并没有申请内存,你只是定义了一个指针变量而已,当然就不用free释放了. 解决方案二: 你动态申请了内存,就必须要释放. 如果使用一个指针,指向一块已经存在内存,就

《从缺陷中学习C/C++》——6.8 指针释放后再次使用

6.8 指针释放后再次使用 从缺陷中学习C/C++代码示例 class MyClass{ private: int m_val; public: MyClass(int value){ m_val = value; printf("new class A\n"); } void getValue(){ printf("%d\n",m_val); } }; void function_a() { MyClass *A = new MyClass (1); functi

内存陷阱:驯服C++中的野指针

什么是野指针? 一个母亲有两个小孩(两个指针),一个在厨房,一个在卧室,(属于不同的代码块,其生存期不同)母亲让在厨房的小孩带一块蛋糕(指针指向的对象)给在卧室的小孩,这样在卧室的孩子才肯写作业.但这个在厨房的小孩比较淘气,他在走出厨房时自己将蛋糕吃了,没能带出来.而在卧室的没有吃到蛋糕,所以不肯完成他的作业.结果母亲却不知道卧室的孩子没有吃到蛋糕,还以为作业完了.结果第二天她就被老师召唤到办公室了.事情麻烦了. 这样,那个在卧室的孩子就是野指针了,因为他没有得到应得的蛋糕,不能完成母亲交给他的

编程题-面试中碰到的java基础题

问题描述 面试中碰到的java基础题 今天面试碰到这么一个问题,想了半天,不知如何回答 P1=V1; P2=V2; method(P1,P2){ P1=V3; P2=V4; } 结果是P1=V1;P2=V4;问P1P2是什么类型的时候才会出现这种情况 解决方案 在传递的时候,如果传递的是原生数据类型,则值不会改变 public class Test { public static void main(String[] args) { int a = 1; int b = 2; swap(a,b)

程序员如何快速准备面试中的算法

我决定写篇短文,即为此文.之所以要写这篇文章,缘于微博上常有朋友询问,要毕业找工作了,如何备战算法.尽管在微博上简单梳理过,如下图所示:        但因字数限制,特撰此文着重阐述下:程序员如何快速准备面试中的算法,顺便推荐一些相关的书籍或资料. 备战面试中算法的五个步骤 总体来说,备战面试中的算法,分为五个步骤,如下: 1.首选你得确保自己已经掌握好一门编程语言 如果是C的话,推荐Dennis M. Ritchie & Brian W. Kernighan著的<C程序设计语言>,和

面试中关于Java中涉及到知识点(转)

本篇文章会对面试中常遇到的Java技术点进行全面深入的总结,帮助我们在面试中更加得心应手,不参加面试的同学也能够借此机会梳理一下自己的知识体系,进行查漏补缺.   1. Java中的原始数据类型都有哪些,它们的大小及对应的封装类是什么? (1)boolean boolean数据类型非true即false.这个数据类型表示1 bit的信息,但是它的大小并没有精确定义. <Java虚拟机规范>中如是说:"虽然定义了boolean这种数据类型,但是只对它提供了非常有限的支持.在Java虚拟

xml-为什么在C++用智能指针循环打开XML文件时指针释放时出错

问题描述 为什么在C++用智能指针循环打开XML文件时指针释放时出错 小弟在VS2012中用C++编一个打开XML的程序中遇到了些问题.我打开XML的方法是通过打开一个索引XML文件(Index)然后获得子XML文件的路径,然后在根据这些路径用循环的方式打开子XML文件获取里面的信息.但是,我的程序不知道为什么出错,当子XML是只有一个时,程序就可以正常运行,当子XML是多个的时候,程序就提升出错,有数据中断.我设了断点查看错误原因,具体是在读完子XML,并进行完xmlfile.UnLoadXM

xml-C++用智能指针循环打开XML文件时指针释放时出错

问题描述 C++用智能指针循环打开XML文件时指针释放时出错 小弟在VS2012中用C++编一个打开XML的程序中遇到了些问题.我打开XML的方法是通过打开一个索引XML文件(Index)然后获得子XML文件的路径,然后在根据这些路径用循环的方式打开子XML文件获取里面的信息.但是,我的程序不知道为什么出错,当子XML是只有一个时,程序就可以正常运行,当子XML是多个的时候,程序就提升出错,有数据中断.我设了断点查看错误原因,具体是在读完子XML,并进行完xmlfile.UnLoadXML()后