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:
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).
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; }
Pire quand j'appelle la commande free pour libérer la mémoire, le MCU plante (HEAP corrompu).
Résultat:
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);
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!
Partager