Pointer and structures cause Segmentation fault
I've been working in a ColorSegmentationAlgorithm with openCV. I finished
the segmentation, but now I'm collecting the object on the picture by
color. In order to do that I've got the "rows" of the image compressed in
RLE and they are refered each other with pointers.
At this point (I think) that everything is all right because I printed on
the console the results of "clusters" compressed in RLE and everything
seems to be ok. Then I look over the list of structures to create a new
variable that will represent the object (With bouncin box, centroid,
etc.). But, here's the trouble, I don't now exactly why when call the
content of the pointer in a "random case" it's bad loaded (It's like
variables were shifted): for example if the structure has this content:
(int i, int je, int js, "pointer" *child) --> {1, 1 , 1, 0x0AB0231A}
its loaded --> {1, 0x0AB0231A, 1, 1}
And If the next "child" is called then it provoke a segmentation fault
(Core dumped) error
So... Here is a part of the code:
struct LineObjRLE {
unsigned int i;
unsigned int js;
unsigned int je;
unsigned int size;
unsigned int color;
struct LineObjRLE *parent;
struct LineObjRLE *child;
};
struct LineObjRLE auxRLE = aRLE[i][j];
vector<struct LineObjRLE> obj;
while (1) {
obj.push_back(auxRLE);
printf("auxRLE: parent: %d -- child: %d\n",
auxRLE.parent, auxRLE.child);
if (auxRLE.child == NULL)
break;
auxRLE = *auxRLE.child;
}
aRLE (array of RLE) is a vector variable that is created while segmentation.
Here I've got some results: (The pointers are displayed like int, but they
are right)
---------------------------------
k: 1
auxRLE: parent: 0 -- child: 55035088
auxRLE: parent: 55036080 -- child: 55505600
auxRLE: parent: 55035088 -- child: 0
---------------------------------
k: 2
auxRLE: parent: 0 -- child: 55035248
auxRLE: parent: 0 -- child: 0
---------------------------------
k: 3
auxRLE: parent: 0 -- child: 55035288
auxRLE: parent: 55036200 -- child: 55505720
auxRLE: parent: 55035288 -- child: 0
---------------------------------
k: 4
auxRLE: parent: 0 -- child: 55035528
auxRLE: parent: 0 -- child: 55505840
auxRLE: parent: 55035528 -- child: 0
---------------------------------
k: 5
auxRLE: parent: 0 -- child: 55035688
auxRLE: parent: 0 -- child: 0
---------------------------------
k: 6
auxRLE: parent: 0 -- child: 55035808
auxRLE: parent: 18 -- child: 6
Segmentation fault (core dumped)
The segmentation occurs when "the shift" that I described before happens.
When I examined all the content of the structure I saw that the pointers
where in other variables of the structure and the pointer has other values
(so point to 6 or 18 generate the error).
PD: Instead of saving also "parents" pointer, I only use the "child"
direction for look over the structures.
I hope I explained my self, and someone could help me. Thanks in advance!
No comments:
Post a Comment