[PD-dev] How to free memory of t_symbol

Christof Ressi info at christofressi.com
Thu Feb 22 14:41:54 CET 2024


Hi,

Pd symbols are immutable and permanent. `gensym("foo")` looks if the 
symbol "foo" already exists; if yes, it just returns it, otherwise it 
creates a new symbol, adds it to the global symbol table and finally 
returns it.

You must never attempt to free a symbol!

> ```
> t_symbol **x_weights_arrays;
> t_symbol *x_biases_array;
> ``` 
Here you must only free `x_weights_array`, which is an array of 
`t_symbol*`, but not the `t_symbol*` elements themselves.

---

Side note: since symbols are unique and persistent, they can be compared 
*by address*. In other words, two symbols are equal if they have the 
same address. This is different from ordinary C-strings which may reside 
at different memory locations and thus need to be compared with 
`strcmp()` (or equivalent functions).

Christof

On 22.02.2024 10:19, Alexandros Drymonitis wrote:
> I have a data structure with a symbol and an array of symbols that 
> store array names defined as:
>
> ```
> t_symbol **x_weights_arrays;
> t_symbol *x_biases_array;
> ```
>
> When I'm done with them, I want to free the memory, but calling 
> free(x_biases_array) doesn't seem to work, and once called, as soon as 
> I try to do something else in Pd (like unlock the patch and choose an 
> object), Pd crashes.
>
> I have narrowed down the error to freeing these symbols, and I'm sure 
> the crash is not caused by something else. I scanned m_pd.h to see if 
> there is a function to free t_symbol memory, but didn't seem to find 
> anything. This might be something obvious for C-savvy people, but I'm 
> not one, so any advice is welcome.
>
>
>
>
> _______________________________________________
> Pd-dev mailing list
> Pd-dev at lists.iem.at
> https://lists.puredata.info/listinfo/pd-dev





More information about the Pd-dev mailing list