This is the mail archive of the
gcc-help@gcc.gnu.org
mailing list for the GCC project.
Re: signed/unsigned char
- From: random at bubblescope dot net
- To: Milena Constantino Caires <milena at registro dot br>
- Cc: gcc-help at gcc dot gnu dot org
- Date: Wed, 20 Jul 2005 15:56:28 +0100
- Subject: Re: signed/unsigned char
- References: <20050720144555.GA63554@registro.br>
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