一、图解堆栈

 #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的更多相关文章

  1. 【C++札记】动态分配内存(malloc,free)

    介绍 操作系统中存在一个内存管理器(Memory Manager),简称MM,它负责管理内存. MM提供的服务:应用程序可以向MM申请一块指定大小的内存(借出),用完之后应用程序应该释放(还回). 所 ...

  2. 数据结构复习之C语言malloc()动态分配内存概述

    #include <stdio.h> #include <malloc.h> int main(void) { ] = {, , , , }; // 计算数组元素个数 ]); ...

  3. C Primer Plus--C存储类、链接和内存管理之动态分配内存及类型限定词

    目录 存储类说明符 存储类和函数 动态分配内存 malloc函数 free函数 calloc函数 动态分配内存的缺点 C类型限定关键字 constant定义全局常量 volatile关键字 restr ...

  4. 不可或缺 Windows Native (9) - C 语言: 动态分配内存,链表,位域

    [源码下载] 不可或缺 Windows Native (9) - C 语言: 动态分配内存,链表,位域 作者:webabcd 介绍不可或缺 Windows Native 之 C 语言 动态分配内存 链 ...

  5. C++动态分配内存

    动态分配(Dynamic Memory)内存是指在程序运行时(runtime)根据用户输入的需要来分配相应的内存空间. 1.内存分配操作符new 和 new[] Example: (1)给单个元素动态 ...

  6. c/c++动态分配内存和malloc的使用

    c/c++动态分配内存  为什么需要动态分配内存 ---很好的解决的了传统数组的4个缺陷 动态内存分配举例 ---动态数组的构造 使用动态数组的优点:    1. 动态数组长度不需要事先给定: 2. ...

  7. 标C编程笔记day06 动态分配内存、函数指针、可变长度參数

    动态分配内存:头文件 stdlib.h     malloc:分配内存     calloc:分配内存,并清零     realloc:调整已分配的内存块大小     演示样例:         in ...

  8. [c/c++] programming之路(26)、结构体

    一.初始化字符串 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #include&l ...

  9. C&C++动态分配内存(手动分配内存)三种方式

    1. malloc函数 函数原型:void *malloc(unsigned int size)函数的作用是:在内训的动态存储区开辟一个size个字节的连续空间,返回所分配区域的首字节地址. 可以看到 ...

随机推荐

  1. 巧用border效果

    目的: 我们在做css的时候为了提高网站的效率减少服务器请求,我们可以通过css来实现一些简单的图片特效,比如说三角形,这篇文章讲解的是通过边框实现不同的效果. 上面样式部分代码: <style ...

  2. ELK之使用heartbeat监控WEB站点

    简介 无论您要测试同一台主机上的服务,还是要测试开放网络上的服务,Heartbeat 都能轻松生成运行时间数据和响应时间数据 Heartbeat 能够通过 ICMP.TCP 和 HTTP 进行 pin ...

  3. Oracle工具——ADRCI

    ADRCI工具是Oracle11g才推出的新工具,主要用来管理alert文件.trace文件.dump文件.健康监事报告等. 这一篇简单介绍ADRCI工具. 用过11g的人都会发现,11g中alert ...

  4. iview form 表单的怪异小BUG

    当同一个弹窗中的表单重复利用时: 我原先的代码逻辑是: <Form :label-width="100" class="mt20" ref="c ...

  5. Fiddler_内置命令行_03

    Fiddler左下角有一个命令框  [基础命令] [举例说明] ? 回车之后,匹配的内容如下图 stop [断点命令] FIddler断点功能就是将请求截获下来,但是不发送,这个时候你可以干很多事情, ...

  6. java之threadlocal的使用

    基本介绍 ThreadLocal很多地方叫线程本地变量,或者叫线程本地存储.ThreadLocal为每一个使用该变量的线程都提供一个变量值的副本,是每一个线程都可以独立地改变自己的副本,而不会和其它线 ...

  7. vue开发记录--通用时间格式函数

    parseTime(time, fm) { // 解析时间 time: 时间戳或者实践对象 fm: 格式 默认是{y}-{m}-{d} {h}:{i}:{s} if (arguments.length ...

  8. linux 逆向映射机制浅析

    2017-05-20 聚会回来一如既往的看了会羽毛球比赛,然后想到前几天和朋友讨论的逆向映射的问题,还是简要总结下,免得以后再忘记了!可是当我添加时间……这就有点尴尬了……520还在写技术博客…… 闲 ...

  9. winform做的excel与数据库的导入导出

    闲来无事,就来做一个常用的demo,也方便以后查阅 先看效果图 中间遇到的主要问题是获取当前连接下的所有的数据库以及数据库下所有的表 在网上查了查,找到如下的方法 首先是要先建立一个连接 _connM ...

  10. UIWebView 缓存

    //存储cookie的方法 - (void)saveCookies { // 创建一个可变字典存放cookie NSMutableDictionary *fromappDict = [NSMutabl ...