Bonjour

Alors voilà, je code un programme pour un ESP32-P4 (MCU), et je suis face à une erreur de débutant que je n'arrive pas à corriger.

Dans mon driver:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
typedef struct rex_device_struct{
  bool detected = false;
  char type[10];
};
 
 
rex_device_struct* RexDriver::rexDetected(){
  rex_device_struct *devices_struct = (rex_device_struct *)ps_malloc(sizeof(rex_device_struct*) * REX_MAX_DEVICES_SUPPORTED);
 
  for (uint8_t i; i < REX_MAX_DEVICES_SUPPORTED; i++){
    devices_struct[i].detected = false;
    strcpy(devices_struct[i].type, "");    
  }
 
  devices_struct[0].detected = true;
  strcpy(devices_struct[0].type, "REX12D");
 
  return (rex_device_struct*)devices_struct;
}
Quand je fait appel à cette fonction, je me retrouve avec des données faussées, respectivement le champ "detected" est mal évalué (il ne devrait afficher que le Rex device 1).
Pire quand j'appelle la commande free pour libérer la mémoire, le MCU plante (HEAP corrompu).

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
 
rex_device_struct *devices_struct = rex.rexDetected();
 
for (uint8_t i = 0; i < REX_MAX_DEVICES_SUPPORTED; i++){
        if (devices_struct[i].detected){
          Serial.printf("Rex device: %u: %s\n", i, devices_struct[i].type);
        }       
      }
      Serial.println((String)"Memory available in PSRAM : " +ESP.getFreePsram()+"/"+ESP.getPsramSize());
      //free(devices_struct);
Résultat:
Rex device: 0: REX12D
Rex device: 1: ����⪪�
Rex device: 3: ��맪�Z<��
Rex device: 5: ��ϫ����xV
Rex device: 9: ꪮ�=����
Rex device: 11: ��������*�
Rex device: 13: �ꨪ������
Rex device: 15: ��=������

Bref, comme vous l'aurez deviner je débute en C++, et je m'arrache les cheveux.

Quelqu'un saurait m'aider à corriger l'erreur?

Merci!