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;
}
指针变量一定要初始化为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;
}
相关文章推荐
- 基本语言细节--动态内存管理:new/delete 与malloc /free 的几点区别 -----整理于web
- C语言基础(七)- 动态内存
- iOS开发之c语言基础-动态内存分配与管理
- iOS开发之c语言基础-动态内存分配与管理题目
- C语言 动态内存分配的详解及实例
- 郝斌老师c语言学习笔记----动态内存分配
- 当修改完语言包后的编译操作
- Atitit.dart语言的特性 编译时js语言大总结
- RedHat Enterprise Linux Server release 7 语言设置
- Object Pascal语言中的“指针类型”
- Go语言switch语句
- 了解WEB页面工具语言XML(一)产生背景
- httpfetch-一款java语言编写优雅的http接口调用组件
- 易语言创建一个无法关闭窗口的方法
- 五、go语言特性--go语言笔记
- Standard C 语言标准函数库速查 (Cheat Sheet)
- Windows PowerShell 2.0语言之函数和过滤器
- Java语言的关键字
- 各种语言的二进制数据操作
- Android语言设置默认打开myanmar 缅甸