Malloc in VS 2005 C++

When the follow code is compiled, the errors:
Error      1      error C3861: 'malloc': identifier not found      c:\temp\firtemp\firtemp\firtemp.cpp      11      
Error      2      error C3861: 'free': identifier not found      c:\temp\firtemp\firtemp\firtemp.cpp      21      

are generated.

What can be done to correct this?

Thank You
#include <stdlib.h>  
#include <stdio.h>
#include <malloc.h>
#include "stdafx.h"
 
int main( void )
{
   char *string;
 
   // Allocate space for a path name
   string = malloc( 260 );
 
   // In a C++ file, explicitly cast malloc's return.  For example, 
   // string = (char *)malloc( _MAX_PATH );
 
   if( string == NULL )
      printf( "Insufficient memory available\n" );
   else
   {
      printf( "Memory space allocated for path name\n" );
      free( string );
      printf( "Memory freed\n" );
   }
}

Open in new window

dcrackelAsked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

Kent OlsenData Warehouse Architect / DBACommented:
You're using a C++ compiler with strong type casting.  :)  recasting the value returned from malloc should work.

  string = (char *)malloc( 260 );


Good Luck,
Kent


0
Infinity08Commented:
What is <malloc.h> ?
0
dcrackelAuthor Commented:
The compiler, Microsoft Visual C++ 2005

doesn't seem to know what Malloc is? I took that example off MS's web site.
http://msdn.microsoft.com/en-us/library/6ewkz86d.aspx



  string = (char *)malloc( 260 );
and
 string = malloc( 260 );

yield:  Error      1      error C3861: 'malloc': identifier not found      

0
Cloud Class® Course: Microsoft Office 2010

This course will introduce you to the interfaces and features of Microsoft Office 2010 Word, Excel, PowerPoint, Outlook, and Access. You will learn about the features that are shared between all products in the Office suite, as well as the new features that are product specific.

jkrCommented:
I tried the very same sample fom http://msdn.microsoft.com/en-us/library/6ewkz86d(VS.80).aspx - works like a charm:
C:\tmp\cc>cl malloc.c
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 14.00.50727.762 for 80x86
 
Copyright (C) Microsoft Corporation.  All rights reserved.
 
malloc.c
Microsoft (R) Incremental Linker Version 8.00.50727.762
Copyright (C) Microsoft Corporation.  All rights reserved.
 
/out:malloc.exe
malloc.obj
 
C:\tmp\cc>

Open in new window

0
Kent OlsenData Warehouse Architect / DBACommented:
Hi dcrackel,

I suspect that your compiler settings are set so that the reporting of errors and warnings errs on the side of caution.

malloc () returns a void*, not a char*. You're using a C++ compiler, not a C compiler. I suspect that it is attempting a strong typecast of the return value malloc, seeing that a char* is required to meet the program requirement, and not finding an appropriate prototype.

Try recasting the return value and/or compiling the program in C mode.


kent
0
dcrackelAuthor Commented:
Program properties, C/C++ , compile as C (instead of C++)  /TC - Does work.  Thank you for that tip.

Let's say I want to compile this as C++ as this is a simplified example for a larger project.

--No Good --
   char *string;
   string = malloc( 260 );


--- No Good --
   char *string;
   string = (char *)malloc( 260 );

Both yield: Error      1      error C3861: 'malloc': identifier not found



0
jkrCommented:
That's odd. Try adding

#include <stdlib.h>

and then (if that is not enough)

   string = (char *) ::malloc( 260 );
0
Kent OlsenData Warehouse Architect / DBACommented:

Don't know what to tell you about the error when you recast.  That's pretty standard stuff and should be supported by both C and C++ code.

Something else is going on.  Recasting the return value from malloc() should work fine.


Kent
0
dcrackelAuthor Commented:
another update.

as jkr: did, it works when compiled from the command line, not from inside Visual Studio?

/shurg

0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
jkrCommented:
Should work in both cases - the command line is just a quicker way to do that.
0
dcrackelAuthor Commented:
also to note, it must be a envirment setting or some related issue.

VS 6 has the same issues on my machine as 2005.

Also note:    string = malloc( _MAX_PATH );
generates: Error      1      error C2065: '_MAX_PATH' : undeclared identifier


which seems that #include <stdio.h>  isn't being linked.

is it possible that all libs are being referanced for some reason or another?
0
dcrackelAuthor Commented:
Such an amazing n00b here, hopefully somewhere someone can learn from this also.

It seems if you have precompiled headers set, that MS compiler looks to stdafx.h for includes. For reasons I don't understand, if I move my includes into the stdafx.h the libs are included.

I don't, it doesn't included from the .c or .cpp files.

I'm sure this can altered with the project settings, but I'm not pro on those either.  



0
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
C++

From novice to tech pro — start learning today.

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.