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