详解C语言中free()函数与getpagesize()函数的使用
C语言free()函数:释放动态分配的内存空间
头文件:
#include <stdlib.h>
free() 函数用来释放动态分配的内存空间,其原型为:
void free (void* ptr);
free() 可以释放由 malloc()、calloc()、realloc() 分配的内存空间,以便其他程序再次使用。
【参数说明】ptr 为将要释放的内存空间的地址。
free() 只能释放动态分配的内存空间,并不能释放任意的内存。下面的写法是错误的:
int a[10]; // ... free(a);
如果 ptr 所指向的内存空间不是由上面的三个函数所分配的,或者已被释放,那么调用 free() 会有无法预知的情况发生。
如果 ptr 为 NULL,那么 free() 不会有任何作用。
注意:free() 不会改变 ptr 变量本身的值,调用 free() 后它仍然会指向相同的内存空间,但是此时该内存已无效,不能被使用。所以建议将 ptr 的值设置为 NULL,例如:
free(ptr); ptr = NULL;
代码示例:
#include <stdlib.h> int main () { int * buffer1, * buffer2, * buffer3; buffer1 = (int*) malloc (100*sizeof(int)); buffer2 = (int*) calloc (100,sizeof(int)); buffer3 = (int*) realloc (buffer2,500*sizeof(int)); free (buffer1); free (buffer3); system("pause"); return 0; }
C语言getpagesize()函数:取得内存分页大小
头文件:
#include <unistd.h>
定义函数:
size_t getpagesize(void);
函数说明:返回一分页的大小,单位为字节(byte)。此为系统的分页大小,不一定会和硬件分页大小相同。
返回值:内存分页大小。
附加说明:在 Intel x86 上其返回值应为4096bytes。
范例
#include <unistd.h> main(){ printf("page size = %d\n", getpagesize()); }
相关推荐
-
C语言基础之malloc和free函数详解
本文介绍malloc和free函数的内容. 在C中,对内存的管理是相当重要.下面开始介绍这两个函数: 一.malloc()和free()的基本概念以及基本用法: 1.函数原型及说明: void *malloc(long NumBytes):该函数分配了NumBytes个字节,并返回了指向这块内存的指针.如果分配失败,则返回一个空指针(NULL). 关于分配失败的原因,应该有多种,比如说空间不足就是一种. void free(void *FirstByte): 该函数是将之前用malloc分
-
C语言中free函数的使用详解
free函数是我们再写C语言程序时常用的函数,但是使用时需要注意,一不小心很肯能会引起吐核. 注意:free函数与malloc()函数配对使用,释放malloc函数申请的动态内存.对于free(p)这句语句,如果p 是NULL 指针,那么free 对p 无论操作多少次都不会出问题.如果p 不是NULL 指针,那么free 对p连续操作两次就会导致程序运行错误. 看一个程序 #include <stdio.h> #include <stdlib.h> int main() { cha
-
C语言之free函数以及野指针介绍
[FROM MSDN && 百科]原型:void free(void *ptr);#include<stdlib.h>或#include <malloc.h>Deallocate space in memory释放ptr指向的存储空间.被释放的空间通常被送入可用存储区池,以后可在调用malloc.realloc以及realloc函数来再分配.注意:连续两次使用free函数,肯定会发生错误.malloc的次数要和free的次数相等.A block of memory
-
详解C语言中sizeof如何在自定义函数中正常工作
1.在main函数中,sizeof是可以正常工作的,比如: int main() { int n[5]; printf("input: \n"); int i ; for(i = 0; i < 5; i++) { scanf("%d",n + i); } int len = sizeof(n)/sizeof(n[0]); printf("%d\n",len); return 0; } 2.但是在自定义函数中就不可以了,如下: #includ
-
举例详解Go语言中os库的常用函数用法
(f *File).Name()这个函数是返回文件的名称,函数原型func (f *File) Name() string要文件的指针操作,返回字符串,感觉比较鸡助的方法底层实现 复制代码 代码如下: func (f *File) Name() string { return f.name } import ( "fmt" "os" ) func main() { f, _ := os.Open("1.go") fmt.Println(
-
详解C语言中return返回函数局部变量的问题
目录 return返回栈区局部变量的指针 return返回栈区局部的临时变量 return只读数据段和static数据 在计算机中,释放空间并不需要将空间中的内容全部置成0或者1,而是只要设置这一块空间的数据无效即可.比如在下载文件时需要花很长时间,但是删除文件却只要几秒钟,这是因为操作系统只是把文件标识(文件头链接)删掉了,文件原文还保留着,我们没了文件标识就找不到这个文件了.所以删除后的文件,还可以用特殊的办法被找回来. 这也就意味着,当函数结束调用的时候,函数中的局部变量实际上还是在的,只
-
详解C语言中return与exit的区别
详解C语言中return与exit的区别 1,exit用于在程序运行的过程中随时结束程序,exit的参数是返回给OS的.main函数结束时也会隐式地调用exit函数.exit函数运行时首先会执行由atexit()函数登记的函数,然后会做一些自身的清理工作,同时刷新所有输出流.关闭所有打开的流并且关闭通过标准I/O函数tmpfile()创建的临时文件.exit是结束一个进程,它将删除进程使用的内存空间,同时把错误信息返回父进程,而return是返回函数值并退出函数 2,return是语言级别的,它
-
详解 Go 语言中 Map 类型和 Slice 类型的传递
Map 类型 先看例子 m1: func main() { m := make(map[int]int) mdMap(m) fmt.Println(m) } func mdMap(m map[int]int) { m[1] = 100 m[2] = 200 } 结果是 map[2:200 1:100] 我们再修改如下 m2: func main() { var m map[int]int mdMap(m) fmt.Println(m) } func mdMap(m map[int]int) {
-
详解Golang语言中的interface
interface是一组method签名的组合,interface可以被任意对象实现,一个对象也可以实现多个interface.任意类型都实现了空interface(也就是包含0个method的interface),空interface可以存储任意类型的值.interface定义了一组方法,如果某个对象实现了某个接口的所有方法,则此对象就实现了此接口. go version go1.12 package main import ( "fmt" ) // 定义struct type Hu
-
详解go语言中type关键词的几种使用
type是go语法里的重要而且常用的关键字,type绝不只是对应于C/C++中的typedef.搞清楚type的使用,就容易理解go语言中的核心概念struct.interface.函数等的使用.以下我用例子代码总结描述,请特别留意代码中的注释. 1.定义结构体 //结构体定义 type person struct { name string //注意后面不能有逗号 age int } func main() { //结构体初始化 p := person{ name: "taozs",
-
详解R语言中的PCA分析与可视化
1. 常用术语 (1)标准化(Scale) 如果不对数据进行scale处理,本身数值大的基因对主成分的贡献会大.如果关注的是变量的相对大小对样品分类的贡献,则应SCALE,以防数值高的变量导入的大方差引入的偏见.但是定标(scale)可能会有一些负面效果,因为定标后变量之间的权重就是变得相同.如果我们的变量中有噪音的话,我们就在无形中把噪音和信息的权重变得相同,但PCA本身无法区分信号和噪音.在这样的情形下,我们就不必做定标. (2)特征值 (eigen value) 特征值与特征向量均为矩阵分
-
详解C++语言中std::array的神奇用法
概述 std::array是在C++11标准中增加的STL容器,它的设计目的是提供与原生数组类似的功能与性能.也正因此,使得std::array有很多与其他容器不同的特殊之处,比如:std::array的元素是直接存放在实例内部,而不是在堆上分配空间:std::array的大小必须在编译期确定:std::array的构造函数.析构函数和赋值操作符都是编译器隐式声明的--这让很多用惯了std::vector这类容器的程序员不习惯,觉得std::array不好用.但实际上,std::array的威力
-
详解go语言中sort如何排序
目录 sort包源码解读 前言 如何使用 基本数据类型切片的排序 自定义Less排序比较器 自定义数据结构的排序 分析下源码 不稳定排序 稳定排序 查找 Interface 总结 参考 sort 包源码解读 前言 我们的代码业务中很多地方需要我们自己进行排序操作,go 标准库中是提供了 sort 包是实现排序功能的,这里来看下生产级别的排序功能是如何实现的. go version go1.16.13 darwin/amd64 如何使用 先来看下 sort 提供的主要功能 对基本数据类型切片的排序
随机推荐
- Class Of Marquee Scroll通用不间断滚动JS封装类第1/2页
- 在Django中限制已登录用户的访问的方法
- nicedit 轻量级编辑器 使用心得
- node.js中使用node-schedule实现定时任务实例
- Java8新特性lambda表达式有什么用(用法实例)
- 零基础上手Swift快速入门教程概览
- 如何合并多个 .NET 程序集
- 数组处理函数库第1/2页
- php需登录的文件上传管理系统
- JSP struts2 url传参中文乱码解决办法
- Android应用程序保持后台唤醒(使用WakeLock实现)
- 解决163/sohu/sina不能够收到PHP MAIL函数发出邮件的问题
- vue过渡和animate.css结合使用详解
- javascript 使用正则test( )第一次是 true,第二次是false
- jquery获取input type=text中的值的各种方式(总结)
- 设置jQueryUI DatePicker默认语言为中文
- Linux下实现UTF-8和GB2312互相转换的方法
- Android中activity的启动模式
- Android 中Lambda表达式的使用实例详解
- web标准常见问题集合第1/2页