-
2021-11-05 15:08:10
#include <stdio.h> /* printf, scanf, NULL /
#include <stdlib.h> / malloc, free, rand, system /
int main ()
{
int i=255,n;
char * buffer;
printf (“输入字符串的长度:”);
//scanf ("%d", &i);
buffer = (char)malloc(i+1); // 字符串最后包含 \0
if(buffer==NULL) exit(1); // 判断是否分配成功
// 随机生成字符串
for(n=0; n<i; n++){
buffer[n] = rand()%26+‘a’;
buffer[i]=’\0’;
}
printf (“随机生成的字符串为:%s\n”,buffer);
free(buffer); // 释放内存空间
system(“pause”);
return 0;
}更多相关内容 -
C malloc函数用法
2020-08-19 00:17:25malloc函数的实质体现在,它有一个将可用的内存块连接为一个长长的列表的所谓空闲链表。调用malloc函数时,它沿连接表寻找一个大到足以满足用户请求所需要的内存块。然后,将该内存块一分为二(一块的大小与用户请求... -
malloc函数用法
2018-06-09 19:38:001、函数声明void *malloc(int size);说明:malloc向系统申请分配size字节的内存空间,返回类型为void*类型。2、使用int *p;p = (int *)malloc( sizeof(int) );注意:(1)因为malloc返回的是不确定类型的指针,所以...1、函数声明
void *malloc(int size);
说明:malloc向系统申请分配size字节的内存空间,返回类型为void*类型。
2、使用
int *p;
p = (int *)malloc( sizeof(int) );
注意:
(1)因为malloc返回的是不确定类型的指针,所以返回之前必须经过类型强制转换,否则编译报错,如:“ 不能将void*赋值给int*变量 ”。
(2)malloc只管分配内存,并不会初始化,其内存空间中的值可能是随机的。如果分配的这块空间原来没有被使用过,那么其中每个值都可能是0。相反,空间里面可能遗留各种各样的值。
(3)实参为需要分配的字节大小,如果malloc(1),那么系统只分配了1个字节的内存空间,这时注意,如果在这块空间中存放一个int值,由于int类型占4个字节,那么还有3个字节未分配空间,系统就会在已经分配的那1个字节的基础上,依次向后分配3个字节空间,而这就占有了“别人”的3个字节空间,“别人”原有的值就被清空了。
(4)分配的空间不再使用时,要用free函数释放这块内存空间。
3、示例
分配100个int类型的空间:
int *p;
p = (int *)malloc( sizeof(int) * 100 );
4、malloc函数工作机制
(1)malloc函数被调用时,它会沿空闲链表寻找一个可以满足需求的内存块,然后把所需大小的内存块分配给用户,剩下的返回到链表上。free函数被调用时,它将释放的内存块连接到空闲链表上。
(2)到最后,空闲链表会被分成很多小的内存片段,当用户申请一块较大的内存空间时,空闲链表上可能没有满足需求的内存块了,这时,malloc函数请求延时,并将空闲链表内的小内存片段整理成大的内存块,最终返回。
本文转载于:https://blog.csdn.net/linan5231/article/details/50930630
-
malloc函数的使用
2021-05-30 12:10:41# include<stdio.h> //先讲最基本的语法,最后是完整的例子 /* 2021/5/30 9:30 ... //malloc在malloc.h 文件中放着 int main(void) { int i = 5; // 14行 // 分配了4个字节 静态分配...# include<stdio.h>
//先讲最基本的语法,最后是完整的例子
# include <stdio.h> # include <malloc.h> int main(void) { int i = 5; int * p = (int *)malloc(4); *p = 5; free(p); printf("同志们好!\n"); return 0; }
/*
2021/5/30 9:30
malloc 是memory(内存) allocate(分配)的缩写(请求分配内存)
*/
# include<malloc.h> //malloc在malloc.h 文件中放着
int main(void)
{
int i = 5; // 14行
// 分配了4个字节 静态分配
int * p = (int *)malloc(4); // 17行
// p 指向4个字节,但p本质上只保存了第一个字节地址,
4个字节只用首地址表示,int *类型已经让我们知道是4个字节为一个变量单元了
// p本身身为指针变量只能指向第一个字节地址,
但是 p 前面定义了数据类型 int ,达到的效果是 p 可以指向4个
//p 本身的4个字节内存和malloc分配的4个内存是不是一样的内存(动态?静态)
//不是 p 是 静态(数据类型+变量名) ,malloc (p 是栈里面的, malloc是堆里面的)
/*
1、要使用malloc函数,必须添加malloc.h这个头文件
2、malloc函数只有一个形参,并且是形参是整型
(系统定义的时候,有几个形参)(一个,实参只有一个,形参就只有一个),
如果实参一个形参两个,程序会报错。
3、4表示请求系统为本程序分配4个字节,malloc(必须是整数),字节不可能是3个半
4、malloc函数只能返回第一个字节的地址,
那第一个字节的地址有没有实际意义-- 没有,除非定义 数据类型
5、malloc函数分配了4个字节,而且只能返回第一个字节地址给 p
也就是系统通过 p 调用 malloc 函数时,通过 p 的值来确定malloc 函数的地址,
而malloc函数默认返回第一个字节地址
假设 p 刚好指向某个存储地址(一横代表一个字节地址),
因为malloc 函数刚好返回这一字节地址 (连续分配空间的4个字节的第一个字节地址(首地址))
那这时候, p 到底占几个字节, p 指向的变量到底占几个字节?
(你不知道在4个字节里头,从第一个字节开始怎么去分配这4个字节,是一个个呢,还是2个2个,还是直接4个就当整体用了)
第一个字节地址本身不能确定它指向的变量到底占几个字节(不能确定它的大小)
(int *)malloc(4);把第一字节地址(这个地址本身无实际意义(malloc函数返回的第一个字节类型是void),
不加强制类型转换,地址的位数不能确定
因为你连它是什么类型都不知道,这时候要强制转换成有实际意义的地址,可以让人们使用,看的懂)
强制转换成 一个 整型的地址(int *)
(char*)malloc(100); // 返回100个字节,一个字节一个变量
(int*)malloc(100); // 返回值还是一样的,还是第一个字节地址,
但是它知道第一个字节地址代表是整型变量的地址,
mlloc函数就知道虽然只有第一个字节地址但是它知道按4个字节,
4个字节发放分配,最后整体100个字节是25个变量
malloc函数虽然返回了第一个字节的地址,但它表示的不是第一个字节的地址,
而是整型变量字节的地址,整型变量的地址肯定是4个,4个字节划分的
【注意】这里说的是如果( )malloc前面不定义数据类型,
就无法确定指针变量所指向第一个字节的地址类型
最终分配几个字节:
p 也是个变量,有空间,需要4个字节保存,地址就是内存单元的编号,有32根地址总线来组合
(一个指针变量无论它指向的变量占几个字节,它本身都只占4个字节)
17行分配了8个字节, p 变量占4个字节, p 所指向的内存也占4个字节(malloc所分配的)
6、 p 本身所占的内存(字节)是静态分配的,p 所指向的内存是动态分配的
*/
*p = 5;
// *p 是动态分配的 ,* p 表示的是 malloc所使用的 4个字节内存
// 代表的就是一个int 变量,只不过 *p 这个整型变量的内存分配方式和 14行 的 i 变量的分配方式不同
free(p); // 终止 动态内存
// free(p); 表示把 p 所指向的内存(字节)给释放掉 ,p本身是静态的,指向地址字节是动态的
//本来这4个字节属于当前 叫malloc 的程序使用,所谓分配,
就是4个字节的使用权限给malloc了;而释放就是4个字节内存不能再用,不能写和读
//p本身的内存是静态的,不能由程序员手动释放,p 本身的内存(所占的字节)
只能再 p 变量所占的函数运行终止是由系统自动释放
printf("同志们好!\n");
return 0;
}
-
C语言malloc函数的用法
2021-08-21 13:06:22malloc的使用方法: int *p = (int*)malloc(sizeof(int)); *p = 1; free(p); 其中,p为一个整型指针变量,由int *p = (int*)malloc(sizeof(int))可以看出来,这句话在给*p分配内存. malloc函数支持一个形参(该形参...在使用malloc函数前,需要调用头文件
# include <malloc.h>
malloc函数的作用是动态分配内存,以解决静态内存定长、不能手动释放等缺陷。
malloc的使用方法:
int *p = (int *)malloc(sizeof(int)); *p = 1; free(p);
还有一种写法:
int *p; p = (int *)malloc(sizeof(int)); free(p);
其中,p为一个整型指针变量,由
int *p = (int*)malloc(sizeof(int))
可以看出来,这句话在给*p分配内存.malloc函数支持一个形参(该形参就是字节大小),而
sizeof(int)
计算出了我们需要的字节数,malloc函数的返回值是一个地址,把分配的动态内存的地址赋给指针p,就是在为*p开辟了一块动态内存。free(p)
则是释放了p所指向的内存。 -
malloc函数及用法
2020-08-10 04:51:12分配内存空间函数malloc:在内存的动态存储区中分配一块长度为"size"字节的连续区域。函数的返回值为该区域的首地址。 -
c语言 malloc 函数用法
2018-11-02 20:40:14函数声明: ...malloc 函数申请空间需要使用free释放。 void* malloc(int size) malloc向系统申请size字节的内存空间,返回值类型为void *。 使用说明: int *p; p = (int *)malloc( sizeof(in... -
malloc函数的使用方法
2021-09-01 22:13:38malloc函数的使用方法 实例 //创建一个长度为numsSizie的整形数值 int* p = (int *)malloc(numsSize * sizeof(int)); 注意使用malloc进行动态分配后,一定要使用free释放内存,否则会造成内存泄露 因此,完整代码... -
malloc函数的用法详解:
2022-03-07 12:48:54malloc函数(动态开辟数组) -
malloc函数的用法
2018-09-04 17:19:43malloc函数是动态分配内存的重要的函数,看完该文,轻松学会使用malloc函数 -
malloc函数详解及用法举例
2021-03-15 22:03:02malloc动态内存分配函数原理详解及编程用法举例(本文由www.169it.com搜集整理)malloc函数函数原型定义void*malloc(size_tsize);malloc函数原型说明malloc函数向系统申请分配size个字节的内存空间。返回值类型是 void... -
malloc函数的用法(超级白话版)
2020-07-14 16:51:10malloc函数的用法 在这里,我不讲什么原理性的东西,我就单纯讲讲怎么用。 首先malloc()函数返回的是void *类型,所以用的时候要进行强制类型转换 malloc函数用完后,记得使用free()函数来释放空间,不然只分配不... -
c语言malloc函数的用法和意义
2019-05-22 19:26:14当我们需要做一个成绩管理系统,人数可能为全校学生,也...为了应对上述问题,我们引入malloc函数。 malloc时动态内存分配函数,用于申请一块连续的指定大小的内存块区域以void*类型返回分配的内存区域地址 mallo... -
C语言中malloc函数的使用方法
2020-04-21 23:10:27C语言中malloc是动态内存分配函数,C++中使用new关键字 函数原型:void *malloc(unsigned int num_bytes); 参数:num_bytes 是无符号整型,用于表示分配的字节数。 返回值:如果分配成功则返回指向被分配内存的... -
C语言malloc函数的功能及用法
2018-12-18 08:01:18关于C语言malloc函数函数介绍应用举例1应用举例2 函数介绍 malloc(memory allocation) 中文名称:动态内存分配 用于申请一块连续的指定大小的内存块区域以void*类型返回分配的内存区域地址,当无法知道内存具体... -
C语言malloc函数详解(通俗易懂)
2022-02-07 21:40:52简单的对malloc函数的用法和与其配套的free函数进行讲解,新手也能一看就明白 malloc的作用是开辟一个空间来供你使用,其返回值是void*类型(可以简单理解为一个没人知道他是什么类型的指针) -
C语言中malloc函数的用法以及原理
2018-08-04 17:18:29C语言中 malloc函数用法 一、malloc()和free()的基本概念以及基本用法: 1、函数原型及说明: void *malloc(long NumBytes):该函数分配了NumBytes个字节,并返回了指向这块内存的指针。如果分配失败,则返回... -
C语言基础之malloc和free函数详解
2021-01-20 06:11:14本文介绍malloc和free函数的内容。 在C中,对内存的管理是相当重要。下面开始介绍这两个函数: 一、malloc()和free()的基本概念以及基本用法: 1、函数原型及说明: void *malloc(long NumBytes):该函数分配了...