linux c动态内存分配函数malloc calloc realloc free

2018-05-14 12:29:11

void *malloc(size_t size)

分配size个字节的内存,成功返回内存地址,失败返回NULL

void *calloc(size_t n, size_t size)

分配n*size个字节内存,并把分配到的内存所有位置0,成功返回内存地址,失败返回NULL

void free(void *ptr)

释放动态分配的内存

void *realloc(void *ptr, size_t size)

改变 ptr 指向的内存大小
realloc(NULL, size) 等同于 malloc(size)
realloc(ptr, 0) 等同于 free(ptr)

/*
   如果 size > ptr的内存大小,将重新分配内存
   如果 size < ptr的内存大小,则截取
*/
realloc(ptr, size)
#include <sys/types.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <fcntl.h>

void main(){
    char *ptr1 = malloc(10);
    printf("%p\n", ptr1);

    char *ptr2 = malloc(10);  //为了使下面的 realloc 重新分配的内存不连续

    //内存起始位置变了,老内存将被自动释放
    ptr1 = realloc(ptr1, 1024);
    printf("%p\n\n", ptr1);


    char *ptr3 = malloc(200);
    printf("%p\n", ptr3);

    char *ptr4 = realloc(ptr3, 300);

    printf("%p\n", ptr4);
}
0xb5f010
0xb5f050

0xb5f460
0xb5f460


例子

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(){
    char *url = (char *)malloc(30);
    strcpy(url, "http://www.freecls.com");
    
    char *name = (char *)calloc(20, sizeof(char));
    strcpy(name, "沧浪水");
    
    puts(name);
    puts(url);
    
    free(name);
    free(url);
}
/*
沧浪水
http://www.freecls.com
*/

详细介绍可以参照另一篇《linux动态内存分配

总结

1.本文对linux c内存相关函数做了简单的介绍,如果有疑问可以给我留言
2.gcc4.8,运行环境centos7 64位
3.原文地址http://www.freecls.com/a/2712/21

©著作权归作者所有
收藏
推荐阅读
  • linux c存储期、作用域、链接

    存储期:静态存储期分配的内存在程序执行期间一直存在线程存储期分配的内存从线程生成到线程结束之前一直存在自动存储期对象一般在块里面,当程序进入这个块时分配内存,退出这个块时就释放内存动态存储期手动分配内...

  • linux c字符串-指针

    C语言中的字符串是最有用最重要的数据类型之一,虽然我们平常用的很多,但是内部各种细节相信不是每个人都能说得明白。字符串涉及到很多指针操作,对指针不太熟悉的建议先阅读linux c数组和指针(详解)。字...

  • linux c数组和指针(详解)

    指针是c语言中最重要的同时也是最难掌握的,因为数组跟指针息息相关,所以放在一起讲解。//声明数组 int arr[3]; int arr[3] = {1,2,3}; #非字符串 char str_a...

  • linux centos7 安装逻辑卷指令来支持lvm2

    报如下错时。-bash: pvcreate: command not found-bash: pvscan: command not found-bash: pvdisplay: command no...

  • linux 压缩命令gzip、bzip2、xz

    gzipgzip是为了取代compress 并提供更好的压缩比,zcat/zmore/zless用来查看压缩文件-c :将压缩的数据输出到屏幕上,可通过数据流重导向来处理; -d :解压缩的参数; -...

  • nginx模块 ngx_http_headers_module

    ngx_http_headers_module 模块是用来增加 Expires 和 Cache-control,或者是任意的响应头。Syntax: add_header name value [alw...

  • nginx模块 ngx_http_gunzip_module、ngx_http_gzip_module、ngx_http_gzip_static_module

    ngx_http_gunzip_module 模块将文件解压缩后并在响应头加上 "Content-Encoding: gzip" 返回给客户端。为了解决客户端不支持gzip压缩。编译的时候带上 --w...

  • nginx模块 ngx_http_flv_module、ngx_http_mp4_module

    ngx_http_flv_module模块提供了对 flv 视频的伪流支持。编译的时候带上 --with-http_flv_module。它会根据指定的 start 参数来指定跳过多少字节,并在返回数...

  • nginx模块 ngx_http_fastcgi_module

    ngx_http_fastcgi_module 模块使得nginx可以与 fastcgi 服务器通信。比如目前要使得 nginx 支持 php 就得使用 fastcgi技术,在服务器上装上 nginx...

  • nginx模块 ngx_http_autoindex_module

    ngx_http_autoindex_module 模块可以将uri以 / 结尾时,列出里面的文件和目录。Syntax: autoindex on | off; Default: autoindex ...

简介
天降大任于斯人也,必先苦其心志。