signed/unsigned char

random@bubblescope.net random@bubblescope.net
Wed Jul 20 14:59:00 GMT 2005


Milena Constantino Caires wrote:

>I would like to know why the following statements do not generate a
>error during compiling but they do generate segmentation fault and
>core dump when the program is running:
>
>
>char* c = new char(1024);
>
>or
>
>u_char* c = new u_char(1024);
>
>I know that the correct form of this memory allocation is "[1024]" and not
>"(1024)" but sometimes it occurs by mistake.
>
>The compiler is not supposed to complain about it???
>
>  
>
Because what you have written is that you want a new char whose value is
initalised to 1024. For example write:

To convince yourself this is true, try for example:
#include<iostream>
int main(void) {
  char* c = new char(65);
  std::cout << *c << std::endl;
}

Which should almost certainly print A, unless you are on a very strange
machine (65 is the ASCII value for A).

I'll admit I'm slightly suprised that the compiler doesn't warn you that
1024 is out of range for a char (on the other hand, the code is still
valid I believe if the char is unsigned).

Unfortunatly I don't know of a good way to catch these kinds of errors,
other than of course a tool like valgrind.

Chris



More information about the Gcc-help mailing list