一种C语言创建超大二维数组的办法

2 篇文章 0 订阅
1 篇文章 0 订阅

 

 

最近需要写一套JNI来纪录整个屏幕的像素信息(9屏截屏),于是想创建一个二维数组方便快捷地进行保存,结果炸开了:

基本可以百分百肯定是栈空间不足,但我又不想增加栈空间,那怎么办呢?其实还是有办法的。

首先二维数组是什么呢?其实就是两部分组成,一个一维指针数组,然后数组里面的每个指针指向(保存)了一个唯一对应的定长数组的首地址而已。(同理,三维数组,就是三部分组成,第一部分是指向一堆等长一维指针数组的指针,第二部分是这些指针指向的一维指针数组,第三部分就是数组),如图:

一维数组:

二维数组:

三维数组:

 

好的,道理我们懂了,那么怎么做呢?既然一次创建会爆炸,那我们可以分步创建的啦:

1、第一步,以int二维数组为例,以宽度(或高度)创建专门装int数组头地址int*指针数组

2、第二步,以宽度(或高度)遍历刚刚的int*地址数组,给每个地址数组创建一个高度(或宽度)为大小的int数组空间,并把空间头地址给予int*地址数组对应的位置。

效果如下,顺利运行。

写这个例子的时候遗漏了free掉申请的堆内存,记得free,不然会内存泄漏

 

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值