DaniWeb IT Discussion Community

DaniWeb IT Discussion Community (http://www.daniweb.com/forums/index.php)
-   C++ (http://www.daniweb.com/forums/forum8.html)
-   -   type casting (http://www.daniweb.com/forums/thread12639.html)

Sukhbir Oct 19th, 2004 6:52 am
type casting
 
what happened if we do't typecast return value of malloc
like that

int *a=malloc(10);

Dave Sinkula Oct 19th, 2004 10:53 am
Re: type casting
 
Casting malloc
int *a = malloc(10 * sizeof *a);

Chainsaw Oct 19th, 2004 5:50 pm
Re: type casting
 
Most compilers will complain because malloc() returns void* and, in C++, you need to cast void* to the type you are mallocing.

Generally, you should use 'new' and 'delete' rather than malloc, for at least these three good reasons:
1) You don't need to cast
2) As Dave pointed out, malloc(10) allocates 10 BYTES, not 10 ints
3) Constructors are not called. Not a big deal with ints, but a huge deal with objects.

In this case,

int* a = new int[10];
delete [] a;

note the need for [] in the delete; if you used [] in new, use them in delete.

subtronic Oct 19th, 2004 9:11 pm
Re: type casting
 
Using C memory allocation routines in C++ programs is BAD FORM.

Narue Oct 20th, 2004 9:26 pm
Re: type casting
 
>int *a = malloc(10 * sizeof *a);
Quote:

Originally Posted by Chainsaw
Most compilers will complain because malloc() returns void* and, in C++, you need to cast void* to the type you are mallocing.

Generally, you should use 'new' and 'delete' rather than malloc, for at least these three good reasons:
1) You don't need to cast
2) As Dave pointed out, malloc(10) allocates 10 BYTES, not 10 ints
3) Constructors are not called. Not a big deal with ints, but a huge deal with objects.

In this case,

int* a = new int[10];
delete [] a;

note the need for [] in the delete; if you used [] in new, use them in delete.

>Using C memory allocation routines in C++ programs is BAD FORM.
I see nothing in the original post that suggests either C++ or C. As the answer is directly related to the language, don't you three think it makes sense to ask before going off on your favorite tangent?

>what happened if we do't typecast return value of malloc
In C, nothing because pointers are implicitly converted to and from void without the need for a cast. In fact, it is best to avoid the cast in C because it hides errors.

In C++, you would get a compile-time error because C++ does not bless implicit pointer conversions to and from void. A cast is required, but it's better to use new in C++ for several reasons that I won't mention because that wasn't your question.


All times are GMT -4. The time now is 7:16 am.

Forum system based on vBulletin Copyright ©2000 - 2009, Jelsoft Enterprises Ltd.
©2003 - 2009 DaniWeb® LLC