arduino 定义了三个指针数组,程序循环3次就停了-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 4658|回复: 13

[未解决] arduino 定义了三个指针数组,程序循环3次就停了

[复制链接]
发表于 2021-8-19 21:37 | 显示全部楼层 |阅读模式
arduino 定义了三个指针数组int *data3 = new int[250];,程序循环3次就停了  请问怎么回事 程序如下
int i1;
int *data1 = new int[250];  
int *data2 = new int[250];
int *data3 = new int[250];

unsigned long counter_ms;
unsigned long counter_ms1;//测量系统时间 单位ms
unsigned long counter_ms2;//测量系统时间 单位ms
void setup() {

  Serial.begin(9600); // 打开串口,设置波特率为9600 bps

}

void loop() {

  for (i1 = 0; i1 < 250; i1++)//循环读取三个传感器的数据
  {

    Serial.print(i1);
    Serial.print(":");
    data1[i1] = analogRead(0); //传感器接到模拟口A0
    Serial.print(data1[i1]);//从串口发送字符串并换行
    Serial.print("/");
    data2[i1] = analogRead(1); //传感器接到模拟口A1
    Serial.print(data2[i1]);
    Serial.print("/");
    data3[i1] = analogRead(2); //传感器接到模拟口A2
    Serial.print(data3[i1]);
    Serial.print("\n");

    delay(4);//延长时间


  }


  delete[] data1;       //数组占用内存的释放
  delete[] data2;
  delete[] data3;

}

发表于 2021-8-20 19:28 | 显示全部楼层
loop()是循环执行的,所以把delete语句放在loop()里是不对的。loop到第二圈的时候data123都已经不存在了
其实在单片机的情景种我们不需要专门设置delete语句。断电以后内存的所有数据都会丢失,每次复位CPU会首先把内存刷一遍。
如果一定要加运行delete,建议设置一个专门的stop函数,适当条件下触发:
  1. void I_said_stop(){
  2.   delete [] data1;
  3.   data1 = 0; //指针置空,避免野指针
  4.   ···
  5.   data3 = 0;
  6.   while(1); //停止运行
  7. }
复制代码
 楼主| 发表于 2021-8-22 10:41 | 显示全部楼层
frankhan747 发表于 2021-8-20 19:28
loop()是循环执行的,所以把delete语句放在loop()里是不对的。loop到第二圈的时候data123都已经不存在了
其 ...

你好 请问如果不加delet的话 定义的这个指针数组一定时间之后会溢出    你说的stop函数是停止程序运行?
发表于 2021-8-22 23:38 | 显示全部楼层
master彬 发表于 2021-8-22 10:41
你好 请问如果不加delet的话 定义的这个指针数组一定时间之后会溢出    你说的stop函数是停止程序运行? ...

喂狗试试?
发表于 2021-8-23 05:53 | 显示全部楼层
master彬 发表于 2021-8-22 10:41
你好 请问如果不加delet的话 定义的这个指针数组一定时间之后会溢出    你说的stop函数是停止程序运行? ...

1. data123是数组,而不是指针数组
2. 你说的这个溢出指什么、体现在哪里?
3. stop函数是后面的while(1);是死循环,单片机运行到这里就不会再做任何事
 楼主| 发表于 2021-8-23 07:53 | 显示全部楼层

???什么意思

点评

设置看门狗定时器,每隔固定时间复位一次  发表于 2021-8-23 11:27
 楼主| 发表于 2021-8-23 07:56 | 显示全部楼层
frankhan747 发表于 2021-8-23 05:53
1. data123是数组,而不是指针数组
2. 你说的这个溢出指什么、体现在哪里?
3. stop函数是后面的while(1) ...

你好 但是我想让他一直在循环loop这个程序 如果加了stop 这样相当于就是停止了loop? 我看到你用了一个while 死循环

点评

对啊,所以stop函数就是帮助强迫症运行delete语句的(其实运不运行都一样),如果你不是强迫症就忽略stop这回事  发表于 2021-8-23 11:26
发表于 2021-8-23 09:18 | 显示全部楼层
int i1;
int data1[250];  
int data2[250];
int data3[250];

unsigned long counter_ms;
unsigned long counter_ms1;//测量系统时间 单位ms
unsigned long counter_ms2;//测量系统时间 单位ms
void setup() {

  Serial.begin(9600); // 打开串口,设置波特率为9600 bps

}

void loop() {

  if (i1 < 250)//循环读取三个传感器的数据
  {

    Serial.print(i1);
    Serial.print(":");
    data1[i1] = analogRead(0); //传感器接到模拟口A0
    Serial.print(data1[i1]);//从串口发送字符串并换行
    Serial.print("/");
    data2[i1] = analogRead(1); //传感器接到模拟口A1
    Serial.print(data2[i1]);
    Serial.print("/");
    data3[i1] = analogRead(2); //传感器接到模拟口A2
    Serial.print(data3[i1]);
    Serial.print("\n");

    delay(4);//延长时间
     i1++;
     }
  }
发表于 2021-8-23 09:24 | 显示全部楼层
如果接收到的数据只发送到串口不需要保存就不用定义那三个数组。
 楼主| 发表于 2021-8-23 14:46 | 显示全部楼层
master彬 发表于 2021-8-23 07:56
你好 但是我想让他一直在循环loop这个程序 如果加了stop 这样相当于就是停止了loop? 我看到你用了一个wh ...

好的 明白了 感谢
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-29 02:52 , Processed in 0.116863 second(s), 20 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表