c语言判断指针是否为空 既然C语言函数的局部变量会被释放,那为什么函数还可以把它return返回呢?
既然C语言函数的局部变量会被释放,那为什么函数还可以把它return返回呢?
看了下面兄弟的回信,我们只能说他们一半是对的。
真正的原因是abi(应用程序二进制接口)。
ABI定义了与系统交互的细节,如数据类型、大小和对齐方式;调用约定(控制函数的参数传递方向、可变长度处理、堆栈清理体以及如何接受返回值等);系统调用的编码以及应用程序如何对操作系统进行系统调用系统;以及采用完整ABI操作系统基本格式、程序库等的第二代对象文件。完整的ABI,如英特尔二进制兼容标准(IBCs),允许支持它的操作系统上的程序在支持此ABI的其他操作系统上运行,而无需修改。
其他ABI标准化细节包括C名称修改和同一平台上编译器之间的调用约定,但不包括跨平台兼容性。
至于下面兄弟提到的eax save返回值,这只是X86的ABI规范。在其他CPU架构平台(如PowerPC)中,实现是不同的!--PowerPC,返回值存储在R3寄存器中
暂时不懂你的代码。
一个原则是,谁是起点。
如果指向此函数中定义的临时自动数组,则返回本地数组指针时一定会出现问题,这就是所谓的内存释放问题。
这样,虽然指针返回,但它指向的内容不再受代码控制,这是非常危险的。
但是如果Start是指main函数中声明的数组,或者是全局或静态数组(在这个函数中定义的静态数组是可以的),或者是动态分配方法得到的内存空间没有释放,那么就没有问题,是完全合理合法的。
使用动态分配方法时,不使用时要注意释放内存空间,以免内存泄漏。
C语言指针函数释放内存?
简而言之,指针是表示地址的无符号整数。
所以仅仅理解指针是不够的。您还需要知道指针指向的数据空间是如何排列的。这可能涉及到一些与特定CPU/OS相关的知识。如果我们能用计算机体系结构的知识来理解它,它会更深刻、更准确。
例如:
如何存储float/double/long double?
如何在数据空间中组织阵列?
字符串是如何存储的?
如何存储结构和联合体?
位域组织
具体CPU相关部分如下:
整数的存储将涉及CPU大小的指定
浮点数的存储直接关系到FPU的设计
此外,还有一些扩展知识,涉及内存的分配和释放:如何在程序中分配内存?(malloc/free)
什么是堆和堆栈?
总而言之:指针是地址和整数。但要充分利用它,我们需要了解计算机存储空间的分配。困难在这里,突破在这里。
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。