C语言:动态内存分配

动态内存分配 

C99

用变量做数组定义的大小

#include <stdio.h>

int main()
{
	int number;
	printf ("请输入数量:") ;
	scanf ("%d", &number ) ;
	int a[number] ;
	
	return 0;
 } 

C99之前

int *a = ( int* ) malloc ( n*sizeof ( int ));

malloc

malloc 

#include < stdlib.h > ; //头文件
void* malloc ( size_t size ) ;
  • malloc 返回的是 void * ,需要类型转换为自己需要的类型;

            void * 表示有一个指针指向一块内存,但不知道指向的到底是什么(类型)

  • malloc 要的参数不是这个数组有多少单元,而是这个数组占据多少空间,与 sizeof 得到的结果一样 ;
  • 向malloc 申请的空间以字节为单位 ;

             可以 malloc ( a * sizeof ( int ) ) , malloc ( a * sizeof ( float ) ) 等等

  • 申请过的都要还回去 :free ( ) ;
#include <stdio.h>
#include <stdlib.h>

int main()
{
	int number ;
	int* a ;
	int i ;
	printf ("请输入数量:") ;
	scanf ("%d",&number) ;
	a=(int*)malloc(number*sizeof(int));  //由于malloc返回 void*,所以要强制类型转换
	for ( i = 0 ; i < number ; i++ ){
		scanf ("%d", &a[i] ) ;
	}
    for ( i = 0 ; i < number ; i++ ){
		printf ("%d ", a[i] ) ;
	}
    free(a);
	return 0;
 } 
  • 可以直接把 a 作为数组用

没空间了

  • 没空间了,申请失败会返回 0 或 NULL ;

看看你的系统给你多大空间 :

#include <stdio.h>
#include <stdlib.h>
int main (void)
{
	void *p;
	int cnt=0;
	while ((p=malloc(100*1024*1024))){
		cnt++;
	}
	printf("分配了%d00MB的空间\n",cnt);
   
	return 0;
}
  •  ( p = malloc(100*1024*1024 ) ):对 p 进行赋值,将这部分结果给 while 判断

free() 

在C语言中,free函数用于释放动态分配的内存空间。通过调用该函数,系统会将之前通过malloccallocrealloc等函数申请的内存空间释放掉,以便其他程序可以使用该内存空间。

使用 free函数时需要注意以下几点:

  • 只能用于释放动态分配的内存空间,不能用于非动态分配的内存空间。
  • 被释放的内存空间必须是之前动态分配的,不能重复释放,也不能释放未动态分配的内存空间。
  • 在释放内存空间之后,应该将指向该内存空间的指针设置为 NULL,以免出现野指针问题。
  • 在使用free函数释放数组内存空间时,应该按照分配内存空间的顺序逆序释放内存空间。
  • 申请过的空间最终都要还 ;
  • 只能还申请来的空间的首地址 ;

不要在地址改变后free,以下不可以:

p = malloc(1024) ;
p++ ;
free (P) ;
p = &i ;
free ( p ) ;
  •  free ( NULL )  可以
  • 一般有指针,会初始化它为 0 ,以便于 free ():
void *p = 0 ;
free ( p );

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值