I am having trouble getting my head around the memory ownership model for IUP's 
implementation of

IupSetAttribute()

And the "string" related value functions like:

IupSetStrAttribute()
IupSetStrf() ...

As I understand the documentation, IupSetAttribute() only stores references to 
strings but does NOT assume ownership of that memory. This means constant 
strings can be stored there, even local (stack-based) strings as long as they 
go out of scope AFTER the Ihandle associated with the attribute has been 
de-allocate/destroyed. This seems to imply that IUP makes absolutely no effort 
to ever "free" strings associated with an attribute when the Ihandle goes out 
of scope or is destroyed. Is this the correct understanding - that string 
values are never free()'ed?

I am trying to understand how IupSetStrAttribute(), IupSetStrf() are different. 
The documentation states that these functions make a copy of the provided 
attribute value. Am I correct to assume that these copies are allocated from 
the heap? If they are allocated from the heap whose responsibility is it to 
free these values when the associated Ihandle has been deallocated/destroyed? 
If IUP frees these strings, how does it differentiate between heap allocated 
string values and constant ones that don't exist in the heap? Assuming I set 
all my attributes using IupSetStrAttribute() and friends is it the expectation 
the user is explicitly responsible for freeing the attribute values (e.g the 
library does not do it)? Is there a way to tell whether an attribute value 
resides on the heap or elsewhere?

I can envision this scenario:

/* Constant string - not allocated on the heap and no need to ever free. */
IupSetAttribute(hnd, "FOO", "bar");

/* Constant string "bar" is replaced by heap memory allocated for formatted 
"bar1" string */
IupSetStrf(hnd, "FOO", "bar%d", 1);

/* Heap memory allocated for formatted "bar2" string - but did we just leak 
memory for "bar1"? */
IupSetStrf(hnd, "FOO", "bar%d", 2);


These same questions (seem) to apply to the IupConfig() family of functions. Do 
they follow an identical memory ownership model as regular Ihandle attributes?

Effectively who must manage the memory associated with value attributes: IUP or 
the user code that sets them (and possibly replaces one value with another).

Thanks for any insights that can be offered . . .


_______________________________________________
Iup-users mailing list
Iup-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/iup-users

Reply via email to