//堆区
//程序员来管理的堆
//内存自己分配
//很大,自由分配
//最大可以到内存的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");
}