Re: Segmentation violation after reading from file



Hi Michael,

Hum, well I am already rewriting the code so that each of the elements 
individually to disk in a file; and then hand marshal them back. For the 
time being it is a simple ASCII table, but we will convert it into an 
XML-layout later, after we have done some testing.

Best regards and thanks again,

Peter


Michael Meeks wrote:

> Hi Peter,
> 
> On Wed, 2003-10-08 at 16:38, Peter Van Osta wrote:
> 
>>I am currently implementing the sorage and retrieval of CORBA structures 
>>and I am getting segmentation violations when retrieving the objects 
>>
> 
> 	Hmm,
> 
> 
>>(example se below). Wrting them to disk works as it doesn't give any 
>>errors
>>
> 
> 	That's also an interestin assertion.
> 
> 
>>Everything looks fine until the actual transfer back to the client.
>>The structures contain "strings", should I copy those subelements 
>>intdividualy with "CORBA_string_dup" or allocate them before sensidng 
>>them back ?
>>
> 
> 	How do you think 'write' works ? show me how you could possibly
> implement fwrite (void *, size_t, size_t, FILE *) to load pointer
> dereferenced strings, and CORBA allocate them into memory ? how would
> the code look ? - perhaps here is the pseudo code ;->
> 
> size_t
> fwrite (void *mem, size_t size, size_t nmemb, FILE *stream)
> {
> 	1. ... guess C type of void * ...
> 	2. ... guess C type is a CORBA type ...
> 	3. ... generically walk C type, dereferencing pointers ...
> 	4. ... keep cache of dereferenced pointers to avoid loops ...
> 	5. ... assign each element a global id ...
> 	6. ... start serialising id / element pairs to disk with
> 	       hierarchical information ...
> }
> 
> 	The problem with this is - that fwrite writes raw bytes straight to
> disk (as you might expect), steps 1 -> 3 are (unfortunately) impossible.
> 
> 
>>The error only occurs in those structures where I have changed the 
>>content of a "string" element prior to wrting them to disk
>>
> 
> 	Grief - well - it's possible that owing to some incredible fluke, the
> 2nd time you run the program the strings are allocated at the same place
> - and thus reading a pointer value in _might_ work.
> 
> 
>>What am I doing wrong in retrieving these structures from disk and 
>>sending them back from the server to the client. On both the client and 
>>the server the objects and their string subelementts are allocated at 
>>startup.
>>
> 
> 	You need to carefully hand-marshal each of the elements individually to
> disk in your binary file format; and then hand marshal them back. I
> would recommend using XML for this.
> 
> 	I would suggest though that you use ghex2 on your existing file first
> to see what's actually happening.
> 
> 	Regards,
> 
> 		Michael.
> 
> 





[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]