Reference to pointer in dxf_*_free incomplete
Bug #1417390 reported by
Bert Timmerman
This bug affects 1 person
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
libDXF |
Won't Fix
|
Undecided
|
Bert Timmerman |
Bug Description
Hi,
I'm getting the impression that pointers to structs are not properly referenced in dxf_*_free() functions.
As is now:
dxf_arc_free (DxfArc *dxf_arc)
{
...
}
Probably has to become:
dxf_arc_free (DxfArc **dxf_arc)
{
...
}
I'm not sure and have to investigate (and test) more.
Maybe someone with more foo on pointers can give some clues how to handle the referencing inside the function.
As it is now, the value of the pointer is not returned from the scope of the function to the caller.
Kind regards,
Bert Timmerman.
tags: | added: api |
description: | updated |
Changed in libdxf: | |
status: | Triaged → Won't Fix |
Changed in libdxf: | |
milestone: | 0.0.1 → none |
To post a comment you must log in.
Hi Bert,
in C is idiomatic to pass a simple pointer, as the free() function does itself. Any C programmer knows that after a free operation the pointer contains junk (and if he does not know, better he stays away from any C code ;).
A related note: I am working on a C project with automatic bindings to other languages (e.g. Lua and Python) and having the straight pointer as first argument is *vital* for letting object oriented style programming automatically work. Not sure it is relevant in your case but... just to let you know.
Another note: actually the implementation of dxf_arc_free() is like
int dxf_arc_free(DxfArc *arc)
{
...
free (arc->linetype);
...
free (arc);
arc = NULL;
return (EXIT_SUCCESS);
}
The "arc = NULL" line is a no-op. You are modifying the "arg" argument of dxf_arc_free() that will be destroyed anyway when the function ends.