• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 5118
  • Last Modified:

malloc C# Equal?

I've got a C++ 6.0 Statement...
TOCRResults = (TOCRRESULTS *)malloc(ResultsInf);

I'm needing to (A) figure out what in the world this is even doing ..I believe it is allocating the amount of bytes to TOCRResults that ResultsInf needs...
and ..(B) what would be the C# Equivalent? Thanks for your time.
0
derekthornton
Asked:
derekthornton
  • 4
  • 2
  • 2
  • +1
2 Solutions
 
stone123Commented:
Answer to (A):

"TOCRRESULTS" seems to be a user-defined class or type.

then "TOCRResults" is simply a pointer to an instance of that class or type.

the "malloc" statement is to allocate certain amount of bytes in the count of "ResultsInf". These bytes are the memory space to hold/contain the instance of "TOCRRESULTS". Most likely, the value of "ResultsInf" can be determined by using "sizeof(TOCRRESULTS)".

In result, the "malloc" is to create an instance of "TOCRRESULTS",  to which the pointer "TOCRResults" points.

Notes: the allocation takes place at the heap of memory. you must call "free" function after you done using it.


Answer to (B):

C# is 100% pure OO. And you are not encouraged to use pointers in C#. so you just define a class "TOCRRESULTS", and create an instance like you do normally. I assume you know what to do at this point.
0
 
_TAD_Commented:


You don't need to worry about allocating memory in C#.  C# has its own garbage collection and monitors memory usage for you.

However, in the case of your example, it appears as if you are allocating a specific address in memory to store pointer information.

While C# does support pointers, I personally believe that pointers cause more problems than they solve.  Pointers and pointer arithmetic is fantasic and VERY fast if used properly, but can cause some serious memory leaks if used inproperly.

Having said all that, you do not need to worry about allocating a specific memory block in C# like you had to in C++.  The only thing you need to worry about is the scope of the object.  Which functions/classes will need access rights to the data in your object.

Pointers allowed for programmers to ignore scope if they needed to and could create global variables.  If you need a global var in C# then use the static reserved word.

0
 
_TAD_Commented:


Bummer!  Beaten by mere seconds (with more or less the same repsponse, although stone's is a bit more concise).

oh well...
0
Concerto Cloud for Software Providers & ISVs

Can Concerto Cloud Services help you focus on evolving your application offerings, while delivering the best cloud experience to your customers? From DevOps to revenue models and customer support, the answer is yes!

Learn how Concerto can help you.

 
derekthorntonAuthor Commented:
I know C# Doesn't like pointers, and frankly, neither do I, however the first post was correct, it is a commercial library I have purchased and am trying to port to C#. It is an OCR Engine. This TOCRResults structure is supposed to hold the Results of an OCR Job, but it's just plain not working and I'm getting VERY frustrated. I've already gotten help with other parts of this project, and am starting to wonder if a full port to C# is even possible....
0
 
derekthorntonAuthor Commented:
Question Answered - Problem still there, but I did get the answer to the malloc question. If anyone else wants to take a crack at this feel free to ask, It's driving me crazy.
0
 
stone123Commented:
Thanks for the points, derekthornton.

When you say OCR, do you mean Optical Character Recognition? Just for curiosity.

why do you want to port it to C#? Is there any particular reason? Personally, I suggest you just use your Visual Studio.NET to create a Managed C++ class library project. And you shouldn't make much change to port it to Managed C++ project, which is also based and runs on .NET framework.

Then there are a few ways to easily call functions and create instances of library classes from a separate C# program. If you are interested, i will write to you more.

Good luck
0
 
derekthorntonAuthor Commented:
I want to write the whole thing in C#. I don't own Visual Studio .NET either, just the individual "Standard" Products. Furthermore, the code I have is pretty unflexible, and I don't like the style the library I bought was coded in. I cannot make it a managed C++ Class Library, because I cannot access the actual 'Source' just the API, so I am stuck with what I have, and calling a C++ .dll from C# is just not something I like to do, it is Very sloppy, in my opinion, and it just never works how I like it to, so I want to rewrite it entirely. And yes, It is an Optical Character Recognition program. I can send you the Solution if you want to see it.
0
 
derekthorntonAuthor Commented:
But if I can just make it an easy to use .dll file, that would work. The problem is that it never wants to load correctly in C# when I try to make a .dll in C++.
0
 
meet_zorrerCommented:
well!
Windows system 32 bit dlls or COM dlls or any kind of dlls, all can be called in .NET framework's any language, just use the interopabilities of the .Net framework, Search in the MSDN

0

Featured Post

Concerto's Cloud Advisory Services

Want to avoid the missteps to gaining all the benefits of the cloud? Learn more about the different assessment options from our Cloud Advisory team.

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