Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arduino动态二维阵列_Arduino - Fatal编程技术网

Arduino动态二维阵列

Arduino动态二维阵列,arduino,Arduino,我正在进行一个Arduino项目,需要在运行时构建(并使用)一个二维数组。我一直在四处寻找解决办法,但运气不好。我在这里找到了一个动态一维数组助手的示例:,所以我一直在尝试采用该代码。我使用以下代码创建了一个库: 我的头文件: \ifndef Dynamic2DArray\u h #定义动态Darray_h #包括“Arduino.h” Darray类 { 公众: 动态DARRAY(布尔排序); //将整数对添加到数组中 布尔加法(整数v1,整数v2); //清除(清空)数组 bool clea

我正在进行一个Arduino项目,需要在运行时构建(并使用)一个二维数组。我一直在四处寻找解决办法,但运气不好。我在这里找到了一个动态一维数组助手的示例:,所以我一直在尝试采用该代码。我使用以下代码创建了一个库:

我的头文件:

\ifndef Dynamic2DArray\u h
#定义动态Darray_h
#包括“Arduino.h”
Darray类
{
公众:
动态DARRAY(布尔排序);
//将整数对添加到数组中
布尔加法(整数v1,整数v2);
//清除(清空)数组
bool clear();
//获取指定行、列中的数组项
int getValue(int行,int列);
//获取数组中的行数
int length();
私人:
int_行;
空*_槽;
bool_排序;
void _sort();
};
#恩迪夫
库的代码:

#包括“Arduino.h”
#包括“Dynamic2DArray.h”
#定义数组_列2
int_行;
空*_槽;
bool_排序;
Dynamic2DArray::Dynamic2DArray(布尔排序){
//设置我们的本地值,指示我们应该去的地方
//分类与否
_排序=已排序;
//初始化行计数,使其从零开始
_行=0;
}
bool Dynamic2DArray::add(intv1,intv2){
//将值添加到数组中
//实施改编自http://playground.arduino.cc/Code/DynamicArrayHelper
//根据当前数组行的大小加上一(新行)分配内存
int elementSize=sizeof(int)*数组_列;
//计算当前阵列正在使用的内存量
int currentBufferSize=elementSize*_行;
//计算新阵列将使用多少内存
int newBufferSize=elementSize*(_行+1);
//为新阵列分配内存(应大于旧阵列)
void*newArray=malloc(newBufferSize);
//newArray是否指向某个对象(内存地址)?
if(newArray==0){
//然后malloc失败,所以返回false
返回false;
}
//将数据从旧阵列复制到新阵列
for(int idx=0;idx
_slots值的初始赋值给了我一些问题,我不知道如何定义它,所以这段代码会生成。_slots变量应该指向动态数组,但我搞错了

当我试图将代码编译成我的项目代码时,我得到以下结果:

Arduino:1.8.0(Windows 10),图版:“Pro-Wedget 3V/12MHz(USB)”
sketch\Dynamic2DArray.cpp:在成员函数“int Dynamic2DArray::getValue(int,int)”中:
sketch\Dynamic2DArray.cpp:83:22:警告:算术[-Wpointer arith]中使用的“void*”类型的指针
返回_槽[行][col];
^
Dynamic2DArray.cpp:83:错误:“void*”不是指向对象类型的指针

有人能帮我修复这个代码吗?我已经把文件发到了

您获取的代码用于1D动态数组;二维阵列的修改太复杂了。放弃这些恐怖

我认为没有理由使用动态数组。您可以假设size max是ROW\u max*COL\u max,因此可以定义一个静态数组
int数组[ROW\u max][COL\u max]

  • 一方面,如果您定义了一个动态数组,您可以在不再使用它时释放空间,并将其用于其他工作。我不知道这是不是你的案子
  • 另一方面,如果您定义了一个静态数组(在UNO上),那么在程序空间上有32kB的可用空间,而不是在RAM上有2kB的可用空间

由于32kB/2kB的差异,通过动态分配获得更大阵列的可能性很小。

您的阵列实际上需要动态调整大小吗?在Arduino上使用动态内存是一个非常糟糕的主意,您能证明这一点吗?对于您的特定错误,请参阅和本例中更一般的解释,通过将_slots定义为
int**u slots来纠正编译错误。是的,数组必须是动态的,因为直到运行时我才知道数组将包含多少个条目。我知道这不是个好主意,但我别无选择。每天早上,应用程序都会构建一个需要执行的操作列表,该列表每天都会变化。我还有别的办法吗?除了链表(我不想在Arduino上实现),动态数组似乎是正确的方法。我知道我为一维数组编写了代码,我正试图将其转换为二维数组。这就是我问题的全部前提。为什么你觉得有必要告诉我一些我已经知道的事情?作为一名专业的软件开发人员,我有30年的工作经验,我对t