2D Array mit Random-Zahlen füllen

Hallo Forum,

ich hänge gerade an einer Stelle die ich mir nicht erklären kann. Vermutlich muss nur jemand anderes drauf gucken. :confused:

Warum habe ich so komische Zahlen in meinem Array?

int Medianmax = 11;
int Sensordaten[11][4];

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
}

void loop() {
  // put your main code here, to run repeatedly:
  
  for (int y = 0; y < Medianmax; y++)
    for (int k = 0; k < 4; k++)
      Sensordaten[y][k] = Sensordaten[y + 1][k];

  for (int i = 0; i < 4; i++)
  {
    Sensordaten[Medianmax][i] = random(10, 20);
    Serial.println(Sensordaten[Medianmax][i]);
  }
  
  for (int y = 0; y < Medianmax; y++)
  {
    Serial.println("");
    for (int k = 0; k < 4; k++)
    {
      Serial.print(" ");
      Serial.print(Sensordaten[y][k]);
    }
  }
  delay(5000);
  Serial.println("");
  Serial.print("-------------------------------");
  Serial.println("");
}

Ausgabe ist:

17
10:27:20.626 -> 19
10:27:20.626 -> 13
10:27:20.626 -> 18
10:27:20.626 -> 
10:27:20.626 ->  0 0 0 0
10:27:20.626 ->  0 0 0 0
10:27:20.659 ->  0 0 0 0
10:27:20.659 ->  0 0 0 0
10:27:20.659 ->  0 0 0 0
10:27:20.692 ->  0 0 0 0
10:27:20.692 ->  0 0 0 0
10:27:20.692 ->  0 0 0 0
10:27:20.726 ->  0 0 0 0
10:27:20.726 ->  0 0 0 0
10:27:20.726 ->  0 0 0 0
10:27:25.686 -> -------------------------------
10:27:25.719 -> 10
10:27:25.719 -> 12
10:27:25.719 -> 14
10:27:25.719 -> 18
10:27:25.719 -> 
10:27:25.719 ->  0 0 0 0
10:27:25.752 ->  0 0 0 0
10:27:25.752 ->  0 0 0 0
10:27:25.752 ->  0 0 0 0
10:27:25.786 ->  0 0 0 0
10:27:25.786 ->  0 0 0 0
10:27:25.786 ->  0 0 0 0
10:27:25.819 ->  0 0 0 0
10:27:25.819 ->  0 0 0 0
10:27:25.819 ->  0 0 0 0
10:27:25.819 ->  -14490 38 20749 37
10:27:30.772 -> -------------------------------
10:27:30.840 -> 13
10:27:30.840 -> 19
10:27:30.840 -> 10
10:27:30.840 -> 15
10:27:30.840 -> 
10:27:30.840 ->  0 0 0 0
10:27:30.840 ->  0 0 0 0
10:27:30.873 ->  0 0 0 0
10:27:30.873 ->  0 0 0 0
10:27:30.873 ->  0 0 0 0
10:27:30.908 ->  0 0 0 0
10:27:30.908 ->  0 0 0 0
10:27:30.908 ->  0 0 0 0
10:27:30.908 ->  0 0 0 0
10:27:30.942 ->  -14490 38 20749 37
10:27:30.942 ->  -2452 31 32526 37
10:27:35.896 -> -------------------------------
10:27:35.929 -> 12
10:27:35.962 -> 12
10:27:35.962 -> 17
10:27:35.962 -> 13
10:27:35.962 -> 
10:27:35.962 ->  0 0 0 0
10:27:35.962 ->  0 0 0 0
10:27:35.996 ->  0 0 0 0
10:27:35.996 ->  0 0 0 0
10:27:35.996 ->  0 0 0 0
10:27:36.030 ->  0 0 0 0
10:27:36.030 ->  0 0 0 0
10:27:36.030 ->  0 0 0 0
10:27:36.030 ->  -14490 38 20749 37
10:27:36.064 ->  -2452 31 32526 37
10:27:36.098 ->  531 39 -30454 34
10:27:41.052 -> -------------------------------

:frowning:

Sensordaten[y + 1][k]

Hier überschreitetst Du die Feldgrenzen.

Danke!! So geht es wenn ich dann auch einmal wieder -1 mache.

int Medianmax = 11;
int Sensordaten[11][4];

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
}

void loop() {
  // put your main code here, to run repeatedly:
  
  for (int y = 0; y <= Medianmax; y++)
    for (int k = 0; k < 4; k++)
      Sensordaten[y][k] = Sensordaten[y + 1][k];

  for (int i = 0; i < 4; i++)
  {
    Sensordaten[Medianmax-1][i] = random(10, 20);
    Serial.println(Sensordaten[Medianmax-1][i]);
  }
  
  for (int y = 0; y < Medianmax; y++)
  {
    Serial.println("");
    for (int k = 0; k < 4; k++)
    {
      Serial.print(" ");
      Serial.print(Sensordaten[y][k]);
    }
  }
  delay(5000);
  Serial.println("");
  Serial.print("-------------------------------");
  Serial.println("");
}
y <= Medianmax;

Damit verschlimmerst Du es und bist sogar zwei Adressen (bei int vier Bytes) über der Feldgrenze.

Bei elf Feldelementen geht der Index von 0 bis 10.

#define Medianmax 11
#define Sensoren 5

int Sensordaten[Medianmax][Sensoren];

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
}

void loop() {
  // put your main code here, to run repeatedly:

  for (int y = 0; y < Medianmax - 1; y++)
    for (int k = 0; k < Sensoren; k++)
      Sensordaten[y][k] = Sensordaten[y + 1][k];

  for (int i = 0; i < Sensoren; i++)
  {
    Sensordaten[Medianmax - 1][i] = random(10, 20);
    Serial.println(Sensordaten[Medianmax - 1][i]);
  }

  for (int y = 0; y < Medianmax; y++)
  {
    Serial.println("");
    for (int k = 0; k < Sensoren; k++)
    {
      Serial.print(" ");
      Serial.print(Sensordaten[y][k]);
    }
  }
  delay(5000);
  Serial.println("");
  Serial.print("-------------------------------");
  Serial.println("");
}

Ja kla. Muss da auch -1 machen.