Chat freely about anything...

User avatar
By Stévanovich
#59235 Hello,
Because i loose Heap in my function, cant delete char ret before return value !



Code: Select allchar* strToChar(String s) {
   checkFreeHeap("strToChar",true);
     unsigned int bufSize = s.length() + 1; //String length + null terminator
    char* ret = new char[bufSize];
    s.toCharArray(ret, bufSize);
    //Serial.print("<" + String(ret) + ">");
     checkFreeHeap("strToChar",false);
     return ret;
}



This one is more clean but, does not return value ? cant understand why !

Code: Select allchar* strToChar(String s) {
   checkFreeHeap("strToChar",true);
   unsigned int b = s.length() + 1;
    char *ret;
    ret = (char*)s.c_str();
    //Serial.print("<" + String(ret) + ">");
     checkFreeHeap("strToChar",false);
     return ret;
}




tools to read heap :

Code: Select all  int old_getFreeHeap = ESP.getFreeHeap();
  int new_getFreeHeap = ESP.getFreeHeap();
  int *p_old_getFreeHeap = &old_getFreeHeap;
  int *p_new_getFreeHeap = &new_getFreeHeap;
void checkFreeHeap(String f,bool m){
  char *e;
  if (m){ e = "AVANT";} else { e = "APRES";}
  *p_new_getFreeHeap = ESP.getFreeHeap();
  if (new_getFreeHeap != old_getFreeHeap ){
    Serial.print("----- ERREUR ---- | Mémoire en baisse   ! | ");
    Serial.print(e);
    Serial.print(" Libre: ");
    Serial.print(new_getFreeHeap);
    Serial.print(" Fonction: ");
    Serial.print(f);
    Serial.print("  | Taille ");
    Serial.println(old_getFreeHeap - new_getFreeHeap);
  }
  old_getFreeHeap = new_getFreeHeap;
}


Thanks for help