[LAD] C - Change in memory causing seg.fault (but why?)

Karl Hammar karl at aspodata.se
Fri Nov 9 15:52:25 UTC 2012


Maarten:
> On 09-11-12 01:58, Jacob wrote:
> 
> > And, BTW, pay attention to the "format %i expects type int" type of
> > warnings. Using the wrong or omitting required length modifiers can lead
> > to segfaults, too. Even if '%d' and '%ld' refer to integers of the same
> > size on an i386 platform, on a 64 bit platform they won't and weird
> > things can happen if the argument doesn't match the format spec.
> > 
> > Jacob
> 
> 
> Yeah, that explains why I didn't get any compiling error on a 32bit
> computer and did get on a 64bit one (where I did correct the error).
> However, the latter was satisfied with %li. Apparently in c++ there is
> no difference between long and long int (as far as I can find through
> Google)

> but for c I could not find much info on a potential difference.

 If you look in the c standard or one of its drafts, e.g. this one:

http://www.open-std.org/JTC1/SC22/WG14/www/docs/n1256.pdf

In (pdf)page 111 (written page 99) you'll find:

[qoute]

6.7.2 Type specifiers

...

2 At least one type specifier shall be given in the declaration specifiers in each declaration,
  and in the specifier-qualifier list in each struct declaration and type name. Each list of
  type specifiers shall be one of the following sets (delimited by commas, when there is
  more than one set on a line); the type specifiers may occur in any order, possibly
  intermixed with the other declaration specifiers.
  -- void
  -- char
  -- signed char
  -- unsigned char
  -- short, signed short, short int, or signed short int
  -- unsigned short, or unsigned short int
  -- int, signed, or signed int

[newpage]

-- unsigned, or unsigned int
-- long, signed long, long int, or signed long int
-- unsigned long, or unsigned long int
-- long long, signed long long, long long int, or
   signed long long int
-- unsigned long long, or unsigned long long int
-- float
-- double
-- long double
-- _Bool
-- float _Complex
-- double _Complex
-- long double _Complex
-- struct or union specifier
-- enum specifier
-- typedef name

...

5 Each of the comma-separated sets designates the same type, except that for bit-fields, it is
  implementation-defined whether the specifier int designates the same type as signed
  int or the same type as unsigned int.

[end qoute]

I.e. "long" and "long int" designates the same type.

Regards,
/Karl Hammar

-----------------------------------------------------------------------
Aspö Data
Lilla Aspö 148
S-742 94 Östhammar
Sweden
+46 173 140 57





More information about the Linux-audio-dev mailing list