malloc 动态分配数组大小问题

malloc 动态分配数组大小问题,第1张

实际上是这样,你分配了一个具有3个整形元素的动态内存,那好,系统在全局堆中为你找到一片内存,供你使用,假设地址分别是,0x00008000、0x00008004、0x00008008,那么指向这块内存首地址的是指针ptr,那么ptr、ptr+1、ptr+2好理解,那么ptr+3呢,很简单,指向0x0000800C,ptr+4呢,则指向0x00008010。。。以此类推,也就是说C++不负责你内存越界的问题,你自己小心点吧,呵呵!

CArray::GetSize

int GetSize( ) const;

Remarks

Returns the size of the array Since indexes are zero-based, the size is 1 greater than the largest index

建议,装个MSDN,每个在MOCROSOFT WINDOWS上编程的人都要安装,并使用好!

ArrayList就是动态数组,也是一个对象。

创建一个ArrayList对象,该对象存放在堆内存中,且是一个内存连续的内存区域。

1、ArrayList是用数组实现的,这个数组的内存是连续的,不存在相邻元素之间还隔着其他内存。

2、索引ArrayList时,速度比原生数组慢是因为你要用get方法,这是一个函数调用,而数组直接用[ ]访问,相当于直接 *** 作内存地址,速度当然比函数调用快。

3、新建ArrayList的时候,JVM为其分配一个默认或指定大小的连续内存区域(封装为数组)。

4、每次增加元素会检查容量,不足则创建新的连续内存区域(大小等于初始大小+步长),也用数组形式封装,并将原来的内存区域数据复制到新的内存区域,然后再用ArrayList中引用原来封装的数组对象的引用变量引用到新的数组对象:

elementData = ArrayscopyOf(elementData, newCapacity);

动态数组是指在声明时没有确定数组大小的数组,即忽略方括号中的下标。使用时,可随时用ReDim语句(C语言中用malloc语句)重新指出数组的大小。

动态数组,是相对于静态数组而言。静态数组的长度是预先定义好的,在整个程序中,一旦给定大小后就无法改变。

而动态数组则不然,它可以随程序需要而重新指定大小。动态数组的内存空间是从堆(heap)上分配(即动态分配)的。是通过执行代码而为其分配存储空间。当程序执行到这些语句时,才为其分配。程序员自己负责释放内存。使用动态数组的优点是可以根据用户需要,有效利用存储空间。

动态数组与静态数组的对比:

对于静态数组,其创建非常方便,使用完也无需释放,要引用也简单,但是创建后无法改变其大小是其致命弱点。

对于动态数组,其创建麻烦,使用完必须由程序员自己释放,否则严重会引起内存泄露。但其使用非常灵活,能根据程序需要动态分配大小。

xl()在Form_Click()首次赋值的结果为:

xl(1)=2

xl(2)=3

xl(3)=4

在sub1中再次赋值的结果为:

xl(1)=2

xl(2)=3

xl(3)=6

xl(4)=12

xl(5)=24

把它们加起来的结果为47

顺便纠正你的笔误:x=s+xl(i) 应该是 s=s+xl(i)

一般数组的定义是不能用变量来作为维数的,

如:int a[n]是不行的;

数组的维数要用常量表达式定义,此常量表达式之恩那个包含整型字面值常量和枚举常量或用常量表达式初始化的const对象,非const变量以及要运行阶段才知道其值得const变量都不能用于定义数组的维数。

要满足你所说的用户输入数组大小的要求,就要用动态数组。

用整型变量来举个例子如下:

C++中用下面定义:

int n;

std::cin >> n;

int a = new int[n];

C语言中可以用malloc:

int n;

scanf("%d", &n);

int a = (int)malloc(n sizeof(int));

要追加一点说明就是动态数组是存储在堆上的,用完了一定要释放内存,否则会造成内存泄露。

释放内存的时候,malloc申请的内存free来释放,new申请的内存用delete释放。

举个单纯用C语言基础知识说明的例子

void maim ()

{

int a[100],i,n;

scanf("%d",&n);

for(i=0;i<=n;i++)

scanf("%d",&a[i]);

printf("%d\n",a[i]);

}

注意n<=100

以上就是关于malloc 动态分配数组大小问题全部的内容,包括:malloc 动态分配数组大小问题、谁知道用什么函数获取CArray类动态数组的长度、java中怎么判断arraylist占用的内存空间大小等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9650721.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-30
下一篇 2023-04-30

发表评论

登录后才能评论

评论列表(0条)

保存