您的位置:首页 > 编程语言 > C语言/C++

c 语言 动态内存

2017-08-27 11:26 204 查看
/*

指针变量一定要初始化为NULL,因为任何指针变量刚被创建时不会自动成为NULL指针,它的缺省值是随机的。

*/

/* 

1.静态内存分配---计算机自己do   高效,不灵活,用完后编译器自动释放内存 

2.动态内存分配---程序员do      手动释放(有风险) 

*/ 

#include <stdio.h>

#include <stdlib.h>//-malloc()

int main()

{
int i=0;//循环变量 

int* p=(int*)malloc( 10*sizeof(int) );/*看成分配了一个数组 

malloc()返回void型指针(任何型)---强转成int

*/

printf("01p=%d\n",p);

int n;

printf("请输入n:"); 

scanf("%d",&n);

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

printf("02p=%d\n",p);

/*判断内存分配是否成功*/

if(p==NULL)

{

    printf("内存分配失败!\n"); 
exit(EXIT_FAILURE); //退出程序 或return -1; 

}

else 

{

printf("内存分配成功!\n"); 

printf("p=%d\n",p);

/*操作代码... */ 

  for(i=0;i<n;i++)

  {

  *(p+i)=i;

  }

  

  for(i=0;i<n;i++)

  {

  printf("%4d",*(p+i));

  }

  printf("\n"); 



/*归还内存*/

free(p) ;//本质:释放内存 

p=NULL;

/*

动态内存:申请-使用-归还

malloc与 free 成对使用

*/ 

printf("03p=%d\n",p);/*结果与printf("02p=%d\n",p);一样,==

==>释放后但没被覆盖,则p还是原来的指针 ---野指针-有风险

保护措施:p=NULL; 

*/

 

 /*野指针 局部变量 出函数块就没了*/

 int* function1()

 {

  int x=9;

  return &x;

  } 

 
getchar();
return 0;

 } 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c语言 动态内存