Velocity Reviews

Velocity Reviews (http://www.velocityreviews.com/forums/index.php)
-   C Programming (http://www.velocityreviews.com/forums/f42-c-programming.html)
-   -   struct looses initialization when passing to a function (http://www.velocityreviews.com/forums/t868971-struct-looses-initialization-when-passing-to-a-function.html)

ArifulHossain tuhin 03-02-2012 03:17 PM

struct looses initialization when passing to a function
 
i have a stuct like following:
typedef struct{
char static[10];
int a;
int b;
}my_type;

now i've initialized it like following:

my_type * s;

s = (my_type *)malloc(sizeof(my_type));
memmove(a->static,buf,len);
s->a = 1;
s->b = 2;
myfunc((void *)&s);


void myfun(void ** data);

inside myfun i retain initialization for the static[10] field. but i loose other initializations of field a and field b.

thanks in advance.

Ian Collins 03-02-2012 10:59 PM

Re: struct looses initialization when passing to a function
 
On 03/ 3/12 04:17 AM, ArifulHossain tuhin wrote:
> i have a stuct like following:
> typedef struct{
> char static[10];
> int a;
> int b;
> }my_type;
>
> now i've initialized it like following:
>
> my_type * s;
>
> s = (my_type *)malloc(sizeof(my_type));
> memmove(a->static,buf,len);
> s->a = 1;
> s->b = 2;
> myfunc((void *)&s);
>
>
> void myfun(void ** data);
>
> inside myfun i retain initialization for the static[10] field. but i loose other initializations of field a and field b.



Your question isn't very clear and you appear to be writing C rather
than C++. You might be better of asking on comp.lang.c and providing
some more details, such as the definition of myfun.

--
Ian Collins

Ian Collins 03-02-2012 11:01 PM

Re: struct looses initialization when passing to a function
 
On 03/ 3/12 11:59 AM, Ian Collins wrote:

Nonsense, please ignore!

--
Ian Collins

Kaz Kylheku 03-02-2012 11:01 PM

Re: struct looses initialization when passing to a function
 
On 2012-03-02, ArifulHossain tuhin <etothepowerpi@gmail.com> wrote:
> i have a stuct like following:
> typedef struct{
> char static[10];


Since static is a reserved keyword, there is no way you compiled any
of this.

Post a complete example that compiles and reproduces the problem
that you perceive.

nick_keighley_nospam@hotmail.com 03-03-2012 02:29 PM

Re: struct looses initialization when passing to a function
 
On Friday, March 2, 2012 3:17:53 PM UTC, ArifulHossain tuhin wrote:

> i have a stuct like following:
> typedef struct{
> char static[10];
> int a;
> int b;
> }my_type;
>
> now i've initialized it like following:
>
> my_type * s;
>
> s = (my_type *)malloc(sizeof(my_type));
> memmove(a->static,buf,len);


like Kaz I don't believe you compiled this. What is 'a'? and buf and len?

> s->a = 1;
> s->b = 2;
> myfunc((void *)&s);
>
>
> void myfun(void ** data);
>
> inside myfun i retain initialization for the static[10] field. but i loose other initializations of field a and field b.


post a short, complete, compliable program that illustrates your problem


Barry Schwarz 03-03-2012 03:29 PM

Re: struct looses initialization when passing to a function
 
On Mar 2, 9:17*am, ArifulHossain tuhin <etothepowe...@gmail.com>
wrote:
> i have a stuct like following:
> typedef struct{
> char static[10];
> int a;
> int b;
>
> }my_type;
>
> now i've initialized it like following:
>
> my_type * s;
>
> s = (my_type *)malloc(sizeof(my_type));
> memmove(a->static,buf,len);
> s->a = 1;
> s->b = 2;
> myfunc((void *)&s);
>
> void myfun(void ** data);
>
> inside myfun i retain initialization for the static[10] field. but i loose other initializations of field a and field b.


Firstly, you need to cut and paste the code in question, not retype
it. Obviously the first argument to memmove should be s->static, not
a->static. We have no idea how many other transcription errors exist.

Secondly, you need to show the code that is experiencing the problem.
We have no idea what the code is for myfunc.

Thirdly, those of who wish to examine the problem in detail often
benefit from a compilable snippet that exhibitis the problem

And regarding what you did post, you seem to be working under the
micsonception that void** is a generic pointer to pointer. It most
definitely is not. It is explicitly a pointer to void and may have a
completely different representation and alignment requirements than
void* which is what you send it. But until we see how myfunc uses it,
we are just guessing.

Shao Miller 03-03-2012 07:29 PM

Re: struct looses initialization when passing to a function
 
On 3/2/2012 10:17, ArifulHossain tuhin wrote:
> i have a stuct like following:
> typedef struct{
> char static[10];


Using 'static' as an identifier there has already been mentioned by others.

> int a;
> int b;
> }my_type;
>
> now i've initialized it like following:
>
> my_type * s;
>
> s = (my_type *)malloc(sizeof(my_type));


Please do not cast the return-value of a call to 'malloc'. It's not
needed because 'malloc' returns a 'void *' value, which can be
implicitly converted to any pointer-to-object type, which includes
'my_type *'. Casting the return-value also increases the chance that if
you forget to #include <stdlib.h>, you don't find out about it during
translation.

> memmove(a->static,buf,len);


Your 'a->static' typo already mentioned by others.

> s->a = 1;
> s->b = 2;
> myfunc((void *)&s);
>
>
> void myfun(void ** data);
>


'&s' has type 'my_type **'. Suppose that the 'my_type *' type (which is
the pointed-to type) is 4 bytes and has an alignment requirement of 4
bytes. Suppose 'void *' has 8 bytes and has an alignment requirement of
8 bytes.

Your call is similar to doing:

void ** data = (void **) &s;

Now if '&s' pointed to address '4' (satisfying the alignment for
'my_type *') but 'data' is expected to point to a multiple of '8'
(satisfying the alignment for 'void *'), then this behaviour is undefined.

> inside myfun i retain initialization for the static[10] field. but i loose other initializations of field a and field b.


How are you attempting to access the original object that you allocated
storage for with 'malloc' from within the body of 'myfun'?

Keith Thompson 03-03-2012 08:55 PM

Re: struct looses initialization when passing to a function
 
Barry Schwarz <schwarz45@yahoo.com> writes:
[...]
> And regarding what you did post, you seem to be working under the
> micsonception that void** is a generic pointer to pointer. It most
> definitely is not. It is explicitly a pointer to void and may have a


You mean "pointer to pointer to void".

> completely different representation and alignment requirements than
> void* which is what you send it. But until we see how myfunc uses it,
> we are just guessing.


--
Keith Thompson (The_Other_Keith) kst-u@mib.org <http://www.ghoti.net/~kst>
Will write code for food.
"We must do something. This is something. Therefore, we must do this."
-- Antony Jay and Jonathan Lynn, "Yes Minister"


All times are GMT. The time now is 02:03 PM.

Powered by vBulletin®. Copyright ©2000 - 2014, vBulletin Solutions, Inc.
SEO by vBSEO ©2010, Crawlability, Inc.