动态内存



//堆区
//程序员来管理的堆
//内存自己分配
//很大,自由分配
       //最大可以到内存的80% 以上



//栈区
//一块是系统内存分配自动管理的就是栈
//栈区很小

//数组在栈区。

int a[1024*1024*1024] ;//栈溢出 stack overflow
system("pause");

#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>
//数组的局限
void main1()
{
	//堆区
	//程序员来管理的堆
	//内存自己分配
	//很大,自由分配


	//栈区
	//一块是系统内存分配自动管理的就是栈
	//栈区很小
	//数组在栈区。
	int a[1024*1024];
	system("pause");
}
//堆区站着茅坑不拉屎
void main2()
{
	//申请一片内存,内存有一个首地址,传递给一个指针
	while (1)
	{
		int *p=(int*) malloc(1024*1024*10);
		Sleep(2000);
	}
	
}
//栈区禁止站着茅坑不拉屎
void data()
{
	int a[10];
	printf("%x",a);
	for(int i=0;i<10;i++)
	{
		a[i]=i;
	}
}
void main()
{
	while(1)
	{
	   data();
	   Sleep(5000);
	}
}

#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>
//数组的局限
void main1()
{
	//堆区
	//程序员来管理的堆
	//内存自己分配
	//很大,自由分配


	//栈区
	//一块是系统内存分配自动管理的就是栈
	//栈区很小
	//数组在栈区。
	int a[1024*1024];
	system("pause");
}
//堆区站着茅坑不拉屎
void main2()
{
	//申请一片内存,内存有一个首地址,传递给一个指针
	while (1)
	{
		int *p=(int*) malloc(1024*1024*10);
		//分配失败,返回null,分配成功,返回地址
		if(p==NULL)
		{
			printf("小姑娘还没有对象");
		}
		Sleep(2000);
		free(p);//使用内存 释放
	}
	
}
//栈区禁止站着茅坑不拉屎
void data()
{
	int a[10];
	int i;
	printf("%x",a);
	for(i=0;i<10;i++)
	{
		a[i]=i;
	}
}
void main3()
{
	while(1)
	{
	   data();
	   Sleep(5000);
	}
}
void mainm()
{
	//int i=10;
	//int a[i];//数组下标是常量
	//malloc 参数 ,分配内存空间
	//返回值分配着一片内存的首地址
	//按照int来解析
	//malloc 可以合理的分配内存
	int*p=(int*)malloc(20*sizeof(int));
	printf("%x",p);
	for(int i=0;i<20;i++)
	{
	   //数组静态指针指向内存 常量指针
		p[i]=i;
		printf("\n%d,%x",p[i],&p[i]);
		printf("\n%d,%x",*(p+i),p+i);
	}
	system("pause");
}
void mainn()
{
	int a=10;
	void *p=&a;//空类型的指针 可以接收任意变量的地址
	//printf("%d",*p);//非法的间接寻址 指针指向什么样的类型数据,void 是没有大小的。不知道指针截取多大。
	printf("\n%d",*((int*)(p)));//类型转换
	//void*p 可以接受任何地址,不能取出内容,不知道
	printf("%x,%x",&a,p);//相等
}

#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>
void main()
{
	int i;
	int *p=(int *)malloc(sizeof(int)*10);
	printf("%x",p);
	for(i=0;i<10;i++)
	{
		p[i]=i;
	}
	free(p);
	//int*px=p;
	//free(px);//这里也触发 断点,同一个地址不能释放两次
//	free(p);//反复释放内存就会触发断点,如果是NULL 释放多次没有问题
	printf("\n%x",p);
	system("pause");
}





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值