Написал (используя пример) функцию возвращающую значение, в ней использована calloc(). Если вызывать free() до выхода из функции, то теряется значение. А как вызвать free() после выхода из функции, если result - это локальная переменная? Код (Text): char* ValSerch(byte s,byte l) { .................................... char* result = (char*)calloc(length+1, sizeof(char)); strncpy(result, fQute, length); return result; } Вызов делаю так Код (Text): int H = atol(ValSerch('"',8));
Если вызвать функцию так: char* r =ValSerch(s, l); то память можно освободить вызовом free(r); Функции free требуется адрес, а не конкретная переменная. Но это "некрасиво", поскольку теоретически (не в скетче ардуино) возможны ситуации, когда это не сработает.
Вообще-то для этого классы придуманы, как-то так: class ValSerch { public: ValSerch( byte s, byte l) { ...; p = (char*)calloc(length+1, sizeof(char)); ...} ~ValSerch() { if( p) free(p) } inline char *ptr() { return p; } private: char *p; };