[Webinar] Streamline your web hosting managementRegister Today

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 2729
  • Last Modified:

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

0
dcrackel
Asked:
dcrackel
  • 5
  • 3
  • 3
  • +1
3 Solutions
 
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
Never miss a deadline with monday.com

The revolutionary project management tool is here!   Plan visually with a single glance and make sure your projects get done.

 
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
 
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

Featured Post

Never miss a deadline with monday.com

The revolutionary project management tool is here!   Plan visually with a single glance and make sure your projects get done.

  • 5
  • 3
  • 3
  • +1
Tackle projects and never again get stuck behind a technical roadblock.
Join Now