[c/c++] programming之路(18)、动态分配内存malloc
一、图解堆栈

#include<stdio.h>
#include<stdlib.h>
#include<Windows.h> void main0(){
int a[**];//stack overflow 栈溢出
system("pause");
} //堆区:占有资源不释放
void main1(){
//申请10M内存,内存有一个首地址,传递给一个指针
while (true)
{
int *p=(int *)malloc(**);
Sleep();
}
system("pause");
} void data()
{
int a[];
printf("%x\n", a);
for (int i = ; i < ; i++)
{
a[i] = i;
}
printf("\n\n");//断点下面有语句才生效
}
//栈区:用完资源,立马释放
void main(){
while (true)
{
data();
Sleep();
}
}

资源用完就被系统自动回收了
二、欺负百度云
#include<stdio.h>
#include<stdlib.h>
#include<Windows.h> _declspec(dllexport) void go1(){
system("calc");
while ()
{
int a[*];//10K
Sleep();//每秒分配50次,即50*10K
}
} _declspec(dllexport) void go2(){
while ()
{
malloc(**);//10M,只有malloc分配的内存才在堆区
Sleep();
}
}
注射go1时,对百度云没影响;注射go2时,才会让它所占内存越来越大
三、如何使用堆区
#include<stdio.h>
#include<stdlib.h>
#include<Windows.h> //void *p可以接收任何地址,但不能取出内容,不知道大小
void main4(){
int a=;
void *p=&a;//空类型的指针可以接受任何地址
printf("%x,%x\n",&a,p);
//printf("%d",*p);//非法的间接寻址
printf("%d",*(int*)(p));//强制转换成int*
getchar();
} void main(){
//malloc分配内存空间,返回值是分配的这一片内存的首地址
int *p=(int *)malloc(*sizeof(int));
printf("%x\n",p);
for (int i = ; i < ; i++)
{
p[i]=i;
printf("%d,%x\n",p[i],&p[i]);
//printf("%d,%x\n",*(p+i),p+i);等价
}
system("pause");
}

四、图形化显示
在MFC文件中创建单击事件
void CMainFrame::OnButton2()
{
// TODO: 在此添加命令处理程序代码
#include<stdlib.h> int *p=(int *)malloc();//malloc用于数据不确定的场合,数组只能用常量
CStringA allstr; for (int i = ; i < ; i++)
{
p[i]=rand();//随机数
CStringA str;
str.Format("p[%d]=%d,&p[%d]=%x\r\n",i,p[i],i,&p[i]);
allstr+=str;
}
MessageBoxA(,allstr,allstr,);
}

五、malloc(用于数据不确定的情况)
#include<stdio.h>
#include<stdlib.h> void main(){
int num;
scanf("%d",&num);
printf("num=%d\n",num);
int *p=(int *)malloc(num*sizeof(int));
for (int i = ; i < num; i++)
{
p[i]=rand()%;
printf("%d\n",p[i]);
}
free(p);
system("pause");
}

注意:用完malloc记得要释放资源(因为malloc用的堆区内存,需要程序员自己操作;数组、变量等数据用的是栈区内存,由系统自动回收)
malloc在堆区,其他都在栈区(全局变量在静态区,优先于main函数)
int *p=(int *)malloc(100); p在栈区,p[1]在堆区
[c/c++] programming之路(18)、动态分配内存malloc的更多相关文章
- 【C++札记】动态分配内存(malloc,free)
介绍 操作系统中存在一个内存管理器(Memory Manager),简称MM,它负责管理内存. MM提供的服务:应用程序可以向MM申请一块指定大小的内存(借出),用完之后应用程序应该释放(还回). 所 ...
- 数据结构复习之C语言malloc()动态分配内存概述
#include <stdio.h> #include <malloc.h> int main(void) { ] = {, , , , }; // 计算数组元素个数 ]); ...
- C Primer Plus--C存储类、链接和内存管理之动态分配内存及类型限定词
目录 存储类说明符 存储类和函数 动态分配内存 malloc函数 free函数 calloc函数 动态分配内存的缺点 C类型限定关键字 constant定义全局常量 volatile关键字 restr ...
- 不可或缺 Windows Native (9) - C 语言: 动态分配内存,链表,位域
[源码下载] 不可或缺 Windows Native (9) - C 语言: 动态分配内存,链表,位域 作者:webabcd 介绍不可或缺 Windows Native 之 C 语言 动态分配内存 链 ...
- C++动态分配内存
动态分配(Dynamic Memory)内存是指在程序运行时(runtime)根据用户输入的需要来分配相应的内存空间. 1.内存分配操作符new 和 new[] Example: (1)给单个元素动态 ...
- c/c++动态分配内存和malloc的使用
c/c++动态分配内存 为什么需要动态分配内存 ---很好的解决的了传统数组的4个缺陷 动态内存分配举例 ---动态数组的构造 使用动态数组的优点: 1. 动态数组长度不需要事先给定: 2. ...
- 标C编程笔记day06 动态分配内存、函数指针、可变长度參数
动态分配内存:头文件 stdlib.h malloc:分配内存 calloc:分配内存,并清零 realloc:调整已分配的内存块大小 演示样例: in ...
- [c/c++] programming之路(26)、结构体
一.初始化字符串 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #include&l ...
- C&C++动态分配内存(手动分配内存)三种方式
1. malloc函数 函数原型:void *malloc(unsigned int size)函数的作用是:在内训的动态存储区开辟一个size个字节的连续空间,返回所分配区域的首字节地址. 可以看到 ...
随机推荐
- java 的访问权限控制
package test06; public class PermissionModel { private int age; public String name; public int getAg ...
- windows Apache服务器简单配置虚拟域名(转载)
1.找到apache目录下的conf下的extra下的httpd-vhosts.conf虚拟主机配置文件 将下面的代码复制粘贴到最下面: #<VirtualHost *:80># ...
- 【登录异常解决】Ubuntu 输入正确的密码后重新返回到登陆界面
症状 Ubuntu 输入正确的密码后,黑屏一闪,重新返回到登陆界面. 原因一:主目录下的.Xauthority文件拥有者变成了root,从而以用户登陆的时候无法都取.Xauthority文件.说明:X ...
- WINDOWS自带md5校验工具
WINDOWS自带的工具certutil.exe, certutil -hashfile chropp.exe MD5; 就可以了
- 关于Could not load driverClass ${jdbc.driverClassName}问题解决方案
在spring与mybatis3整合时一直遇到Could not load driverClass ${jdbc.driverClassName}报错如果将 ${jdbc.driverClassNam ...
- Python学习之旅(三十三)
Python基础知识(32):网络编程(Ⅰ) 网络通信是两台计算机上的两个进程之间的通信,而网络编程就是如何在程序中实现两台计算机的通信 P协议负责把数据从一台计算机通过网络发送到另一台计算机 TCP ...
- redis数据库通过dump.rdb文件恢复数据库或者数据库迁移
环境:centos7.2软件:redis-3.2.10(yum安装) 情景一:公司之前的redis没有开启aof模式,一直是rdb模式,但是数据又非常重要,数据一点也不能丢失,所以需要开启aof,但是 ...
- 下载频道--IT资源关东煮第二期[申明:来源于网络]
下载频道–IT资源关东煮第二期[申明:来源于网络] 地址:http://geek.csdn.net/news/detail/129509?ref=myread
- Linux命令 umask
umask: 文件预设权限 指定当前用户在创建文件或目录时的权限默认值. $ umask0002$ umask -Su=rwx,g=rwx,o=rx 创建文件时,预设没有x 权限,即只有rw 权限,最 ...
- elastricsearch学习笔记
一.基础概念 Elasticsearch有几个核心概念.从一开始理解这些概念会对整个学习过程有莫大的帮助. 接近实时(NRT) Elasticsearch是一个接近实时的搜索平台.这意 ...