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

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

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

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

一维数组:

二维数组:

三维数组:

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

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

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

效果如下,顺利运行。

猜你喜欢

转载自blog.csdn.net/cjzjolly/article/details/84189136
今日推荐