头文件:#include <stdlib.h>

malloc() 函数用来动态地分配内存空间(如果你不了解动态内存分配,请查看:C语言动态内存分配及变量存储类别),其原型为:
void* malloc (size_t size);

【参数说明】size 为需要分配的内存空间的大小,以字节(Byte)计。

【函数说明】malloc() 在堆区分配一块指定大小的内存空间,用来存放数据。这块内存空间在函数执行完成后不会被初始化,它们的值是未知的。如果希望在分配内存的同时进行初始化,请使用 calloc() 函数。

【返回值】分配成功返回指向该内存的地址,失败则返回 NULL。

由于申请内存空间时可能有也可能没有,所以需要自行判断是否申请成功,再进行后续操作。

如果 size 的值为 0,那么返回值会因标准库实现的不同而不同,可能是 NULL,也可能不是,但返回的指针不应该再次被引用。

注意:函数的返回值类型是 void *,void 并不是说没有返回值或者返回空指针,而是返回的指针类型未知。所以在使用 malloc() 时通常需要进行强制类型转换,将 void 指针转换成我们希望的类型,例如:

char *ptr = (char *)malloc();  // 分配10个字节的内存空间,用来存放字符

动态内存分配举例:

 #include <stdio.h>  /* printf, scanf, NULL */
#include <stdlib.h> /* malloc, free, rand, system */ int main ()
{
int i,n;
char * buffer; printf ("输入字符串的长度:");
scanf ("%d", &i); buffer = (char*)malloc(i+); // 字符串最后包含 \0
if(buffer==NULL) exit(); // 判断是否分配成功 // 随机生成字符串
for(n=; n<i; n++)
buffer[n] = rand()%+'a';
buffer[i]='\0'; printf ("随机生成的字符串为:%s\n",buffer);
free(buffer); // 释放内存空间 system("pause");
return ;
}

运行结果:
输入字符串的长度:20
随机生成的字符串为:phqghumeaylnlfdxfirc

该程序生成一个指定长度的字符串,并用随机生成的字符填充。字符串的长度仅受限于可用内存的长度。

http://c.biancheng.net/cpp/html/137.html

C语言malloc()函数:动态分配内存空间的更多相关文章

  1. malloc函数动态分配内存

    #include <stdio.h> #include <stdlib.h> //malloc free #include <windows.h> //sleep ...

  2. 嵌入式-C语言基础:malloc动态开辟内存空间

    #include<stdio.h> #include<stdlib.h> int main() { // char *p;//定义一个野指针:没有让它指向一个变量的地址 // ...

  3. C语言 malloc函数

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.                                                 ...

  4. malloc分配的内存空间是连续的吗

    1.linux内核管理内存空间的分配,所有程序对内存空间的申请和其他操作,最终都会交给内核来管理. 2.linux实现的是“虚拟内存系统”,对用户而言,所有内存都是虚拟的,也就是说程序并不是直接运行在 ...

  5. malloc函数分配内存失败的常见原因

    malloc()函数分配内存失败的常见原因:  1. 内存不足.  2. 在前面的程序中出现了内存的越界访问,导致malloc()分配函数所涉及的一些信息被破坏.下次再使用malloc()函数申请内存 ...

  6. C语言malloc函数为一维,二维,三维数组分配空间

    c语言允许建立内存动态分配区域,以存放一些临时用的数据,这些数据不必在程序的声明部分定义,也不必等到函数结束时才释放,而是需要时随时开辟,不需要时随时释放,这些数据存储在堆区.可以根据需要,向系统申请 ...

  7. C语言 mmap()函数(建立内存映射) 与 munmap()函数(解除内存映射)

    mmap将一个文件或者其它对象映射进内存.文件被映射到多个页上,如果文件的大小不是所有页的大小之和, 最后一个页不被使用的空间将会清零.mmap在用户空间映射调用系统中作用很大. 条件 mmap()必 ...

  8. 在内存充足时malloc函数分配内存失败的原因及解决

    昨天在修改自己的代码的时候,碰到了malloc函数内存分配失败,上网翻了翻,一个很可能的原因是之前的代码出现了越界操作,导致malloc分配函数所涉及的一些信息被破坏.在这个思想的指导下,今天又是郁闷 ...

  9. C语言中指针占据内存空间问题

    以前一直有个疑问,指向不同类型的指针到底占用的内存空间是多大呢? 这个问题我多次问过老师,老师的答案是"指向不同类型的指针占据的内存空间大小不同",我一直很之一这个答案,今天我就做 ...

随机推荐

  1. Android Loader详解四:回调及完整例子

    onLoadFinished 这个方法是在前面已创建的装载器已经完成其加载过程后被调用.这个方法保证会在应用到装载器上的数据被释放之前被调用.在此方法中,你必须删除所有对旧数据的使用(因为它将很快会被 ...

  2. (转载)Linux中cp直接覆盖不提示的方法

    (转载)http://soft.chinabyte.com/os/220/11760720.shtml 新做了服务器,cp覆盖时,无论加什么参数-f之类的还是提示是否覆盖,这在大量cp覆盖操作的时候是 ...

  3. [51Testing情人节活动]情人节,爱要有“礼”才完美!

    2.14情人节,你还在纠结送TA什么礼物么? 你还苦于不敢表白么? 在微信里勇敢说出你的爱 51Testing帮你给TA特别的惊喜! Ps.用这个做借口表个白也不错哦! 本期51官方微信特别选出三种精 ...

  4. 每隔一段时间执行一次函数。window.setTimeout

    timer2 = window.setTimeout("showTaxi()", 30000);//30秒从后台获取一次数据,显示在地图上. 原来试过  setInterval . ...

  5. HW4.27

    public class Solution { public static void main(String[] args) { int count = 0; for(int i = 2001; i ...

  6. C++类实现AVL树

    二叉查找树是个好东西,他让查找,插入,删除,这些常用操作变得高效,但是,他是存在问题的,那就是,在坏的输入序列下,树会退化成链表,这就很尴尬了,于是为了避免这种情况的发生,我们需要一种数据结构,可以自 ...

  7. 校友信息管理&SNS互动平台之技术框架选择

    前言.提纲及说明: 请移步:<校友信息管理&SNS互动平台之前言.目录及说明>(博客园地址:http://www.cnblogs.com/s6cn/p/3516876.html) ...

  8. 一步一步学android控件(之二十五)—— SeekBar

    SeekBar扩展自ProgressBar——在ProgressBar的基础上添加了一个用户可以拖拽的thum. SeekBar.OnSeekBarChangeListener是接收SeekBar进度 ...

  9. DevExpress LookUpEdit 初始化(数据加载) 底层类

    (1)三个效果   1>传的参数较多,对数据表无要求,但可以设置下拉列的宽度和标题       2>传的参数很少,对数据表有要求(必须是处理好的)       3>传的参数一般,对数 ...

  10. 【转】国内较快的maven镜像

    国内连接maven官方的仓库更新依赖库,网速一般很慢,收集一些国内快速的maven仓库镜像以备用. ====================国内OSChina提供的镜像,非常不错=========== ...