精华内容
下载资源
问答
  • 数组在堆还是栈

    千次阅读 2020-02-19 19:54:05
    看以下代码: char * str ( char ch ...打入断点后,让刚执行完arr1 = ...1)固定数组在函数体内声明------》 2)固定数组为全局变量-----》 3) 固定数组在类中声明------》 4)动态数组 -------》

    看以下代码:

    char *str(char ch[],int n)
    {
    	char temp[80] = {0};
    	for (int i = 0; i < n; i++)
    		temp[i] = ch[i];
    	return temp;
    }
    char *arr1=new char[3];
    arr1 = arr("hello", 3);
    
    cout << arr1 << endl;
    

    再调用后如下:
    在这里插入图片描述在打入断点后,让刚执行完arr1 = arr(“hello”,3)
    内存的值为“hel”,但明显红色值,说明有问题。
    在这里插入图片描述
    继续调试,值完全无效。
    在这里插入图片描述
    由此问题在于函数运行结束后,会自动释放函数中数组的值,像是临时变量。
    静态数组在函数里声明是存放在中的,函数运行完毕,程序自动会释放
    于是我将它改成用new,代码如下:

    char * arr(const char ch[], int n)
    {
    	int i;
    	char *t = new char[n + 1];
    	for (i=0 ; i < n; i++)
    		t[i] = ch[i];
    
    	while (i <= n)
    		t[i++] = '\0';
    	
    	cout << &t << endl;
    
    	return t;
    }
    

    这样成功运行并得到我们期望的结果。
    在这里插入图片描述
    总结:
    1)固定数组在函数体内声明------》栈
    2)固定数组为全局变量-----》堆
    3) 固定数组在类中声明------》堆
    4)动态数组 -------》堆

    展开全文
  • 数组存储在栈还是堆

    万次阅读 2015-08-31 09:53:45
    今天看代码,定义了一个结构体 typedef struct {  int a;  int b;  int char[6*1024];... 我的第一反应是,怎么可以定义这么大数据,容易把搞死(理由:数组保存在栈空间)。 哎...忘了是

    今天看代码,定义了一个结构体

    typedef struct {

        int a;

        int b;

        int char[6*1024];

    } ss_t;

    //定义一个指针

    ss_t *sTmp = NULL;

    sTmp = malloc(sizeof(ss_t));

     我的第一反应是,怎么可以定义这么大数据,容易把栈搞死(理由:数组保存在栈空间)。

    哎...忘了是由malloc产生的,根本就是生成在堆上。

     

    但是这样结构体定义变量时就会容易出现栈资源专用严重问题,如下:

    ss_t tmp;

    这样一个变量就占用了6K多栈资源,就不合理了。定义改为如下

    typedef struct {

        int a;

        int b;

        int char* buf

    } ss_t;

    定义变量 ss_t  tmp;再使用malloc申请 buf 就更为合理。
    展开全文
  • 数组存储特点(

    千次阅读 2019-10-07 18:10:28
    内存:存储的都是局部变量。 只要是方法中定义的变量都是局部变量,一旦变量的生命周期结束,该变量就被释放。 (压栈弹 balabalabala) 内存:存储的都是对象,每一个对象都有一个首地址值。内存的变量都...

    JAVA对内存空间的划分

    栈内存:存储的都是局部变量。
    只要是在方法中定义的变量都是局部变量,一旦变量的生命周期结束,该变量就被释放。
    (压栈弹栈 balabalabala)

    堆内存:存储的都是对象,每一个对象都有一个首地址值。堆内存的变量都有默认初始化值。
    (不同类型不一样//int–0 double–0.0 boolean–false char –’\u0000’ string–null)
    当对象不再使用时,会被JAVA垃圾回收机制处理。

    对于: int[] arr = new int[3]; //灵魂画师粗线

    Dong

    另一个例子:

    Dong
    arr成了垃圾

    展开全文
  • 初学者对java数组的认识

    千次阅读 2017-05-19 12:54:58
    java数组中的
    public static void main(String[] args) {
    
            String[] Array = null;
            Array = new String[3];
            Array[0] = "安徽合肥";
            Array[1] = "江苏苏州";
            Array[2] = "安徽铜陵";
    
            for(int i=0;i<=2;i++){
                System.out.println(Array[i]);
    
            }
        }
        以上代码是对数组简单的声明及内存分配的小实例,简单的实现了数组的应用。接下来想和大家分享的是数组在内存中的存放形式,以及在数组中栈和堆的关系。首先给出结论:数组引用变量(即Array变量)是存放在栈内存中,数组元素(即Array[0]、Array[1]等元素)是存放在堆内存中,通过栈内存中的指针指向对应元素的在堆内存中的位置来实现访问,以下图来说明数组此时的存放形式。
    

    这里写图片描述

       在java中,当执行方法时,该方法都会建立自身的内存栈,以用来将该方法内部定义的变量逐个加入到内存栈中,当执行结束时方法的内存栈也随之销毁,所有变量存放在栈内存中,即随着寄存主体的消亡而消亡;反之,当我们创建一个对象时,这个对象被保存到运行时数据区中,即存放在堆空间中,以便反复利用(因为创建成本很高),此时不会随着执行方法的结束而消亡,同时该对象还可被其他对象所引用,只有当这个对象没有被任何引用变量引用时,才会在垃圾回收在合适的时间点回收。
    
    展开全文
  • 来看一个网上很流行的... //全局初始化区3 char *p1; //全局未初始化区4 main()5 {6 intb; //7 char s[] = "abc"; //8 char *p2; //9 char *p3 = "123456"; //123456\0常量区,p3在栈上。10 static int c...
  • 正如gurukulki所说,它存储在堆上。然而,你的帖子暗示了一个误解可能是由于一些善意的人传播的“原始人总是生活堆栈”的神话。这是不真实的。局部变量堆栈上有它们的值,但不是所有的原始变量都是局部变量…...
  • 数组内存分配之

    万次阅读 多人点赞 2017-01-14 20:03:40
    数组既可以存储基本数据类型,也可以存储引用数据类型。 数组的定义格式: 格式1:数据类型[] 数组名;int[] a:定义一个int类型的数组a变量。 格式2:数据类型 数组名[];int a[]:定义一个int类型的a数组变量。 ...
  • 什么是数组? --》数组就是存储相同数据类型的一组数据 区---》new 新建的对象 区--》基本数据类型,内存地址 转载于:https://www.cnblogs.com/zhaozhaozhang/p/5754397.html...
  • 结构体在堆区分配内存二、结构体数组1.结构体数组在栈区分配内存2.结构体数组在堆区分配内存(2种方法)总结 一、结构体 1.结构体在栈区分配内存 程序目的:定义一个结构体变量,包含姓名和年龄。 实现方式:(1)...
  • 一、数组  1.数组就是个容器,里面可以存放任意类型的数  2.定义数组:1)var arr = [];  2)var arr = new Array();构造函数定义方式,如果括号中有一个整数,该正数代表的是数组的长度  3.数组长度...
  • 数组在jvm中的存储

    2020-11-12 23:36:25
    * ###java虚拟机当中 内存划分 * <p> * 区域名称 作用 * 寄存器 给cpu使用, * 本地方法 JVM 调用操作系统时 使用的 * 方法区 存储可以运行的 class文件,(常量池,静态域)...创建数组,jvm会在堆内存中开辟.
  • 数组在JVM中的存储方式

    千次阅读 2019-09-18 19:18:10
  • java数组存储方式

    千次阅读 2020-07-25 09:48:09
    数组的引用存在中,而数组中的元素都存储在堆中。数组作为一种容器,它在堆中所被分配的是一段连续的空间。用来存放元素,这段连续的空间每一个空间都有下标,下标是连续的对应的! 数组作为一种元素容器,它可以...
  • Java数组在内存中是如何存放的

    千次阅读 2021-02-13 02:05:47
    Java中有两种类型的数组:基本数据类型数组;对象数组;当一个对象使用关键字“new”...如果你创建了空间大小为10的整形数组,情况是一样的,一个数组对象所占的空间在堆上被分配,然后返回其引用;二维数组那么二...
  • (Heap):凡是new出来的东西都在堆里面,当中的数据都有默认原则;(重点) 方法区(Method Area):存放的是与.class相关的信息 本地方法区(Native Meat后的 Area):与操作系统有关 寄存器(Register):与...
  • 指针 指针(pointer)是一个值为内存地址的变量(或数据对象) 基本用法 数据类型 * 指针变量名 如 int * ptr_num ...空指针(null pointer)空指针不指向任何对象,试图使用一个指针之前首先检查是否为...
  • 值类型分配在堆,引用类型分配在栈。对吗?struct是值类型,class是引用类型。 class里的值类型分配在堆上对吗。struct里的引用类型,比如数组 内存分配哪。头蒙蒙
  • 数组是分配在栈中的

    千次阅读 2018-07-03 18:02:00
    关于JAVA,下面说法...数组是分配在栈中的 对象所占的内存是由自动内存管理系统回收 JVM 关于 Java 把内存划分成两种:一种是内存,另一种是内存。 存储函数中定义的一些基本类型的变量...
  • 数组内存分析 内存简述 内存是计算机中的重要原件,临时数据存储区域,作用是运行程序。我们编写的程序是存放硬盘中,硬盘中的程序是不会运行的,必须放在内存中才能运行,运行完毕后会i清空内存。 Java虚拟机要...
  • 学习数据结构过程中,由于连续看了数组,队列,链表等,一时混杂,下面摘取参考资料,供自己学习使用。 第一部分:介绍了数据存储结构和数据结构的区别,以及链表和数组的差异。 第二部分:介绍了的区别...
  • 解释定义 数据结构: 数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。再简单描述一下:数据结构就是描述对象间逻辑关系的学科。...Java中的数组就是典型的顺序存储,链表就是非顺序存储。数
  • new创建对象,对象保存在堆还是栈? -->内存是用来存放由new创建的对象和数组,即动态申请的内存都存放在堆内存 -->内存是用来存放函数中定义的一些基本类型的变量和对象的引用变量 例子:局部变量...
  • Java基础-数组在堆栈中的储存

    千次阅读 2018-11-20 16:53:48
    数组在堆栈中的储存数组一旦被定义,其中元素就都有值。 内存中的实体是用来封装数据的,内存的实体都有默认的初始值(不主动给他赋值的情况下),默认值则由数组中元素的类型而定,int型数组默认是0,...
  • 函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放,内分配运算内置于处理器的指令集中,效率高,但是分配的内存容量有限。 : 又称为动态内存分配,程序运行的时候用new申请...
  • 时间:2019-07-05 来源:网络资源 标签:中歌会 问题中的String指的应该是java中的String吧。这里给出的回答针对java。String是一个不可变的...String本身作为一个对象,必然是在堆上的,而String中的内容char[] va...
  • 创建数组的时候分配了一个地址给这个数组,如上所示,arr就是0x0011,通过arr[0]等就可以操作数组。那么当我们什么操作都不做时,整型默认是0,浮点类型默认是0.0;boolean类型初始化值false;字符类型char默认是'...
  • 数据结构,数据存储方式,数组,链表,/,队列

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 151,212
精华内容 60,484
关键字:

数组存储在堆还是栈