Go Premium for a chance to win a PS4. Enter to Win

x
?
Solved

how to free allocated memory in C++ dll function which is called from C# module

Posted on 2015-01-12
8
Medium Priority
?
288 Views
Last Modified: 2015-01-19
Dear All

Do we have any methodology to free allocated memory in C++ dll function which is called from C# module.
Its quite urgent.Can u please help.

Thanks
0
Comment
Question by:BYTECHINDIA
  • 2
  • 2
  • 2
  • +2
8 Comments
 
LVL 75

Expert Comment

by:käµfm³d 👽
ID: 40544323
Who allocates the memory? Is it the C++ or the C#?
0
 
LVL 86

Expert Comment

by:jkr
ID: 40544503
Furthermore, if it is done in the C++ DLL, that will also depend how the allocation was done,, i.e. via 'new', 'new[]', 'malloc()' or some OS-specific API. In other words: That can be quite a simple task if you have the source code and close to impossible if you haven't.
0
 

Author Comment

by:BYTECHINDIA
ID: 40546031
Thanks Sir for the reply,

Memory is getting allocated in C++ DLL only.
Actually This DLL cod eis very big and its an ATL COM DLL.Hence so many places BSTR,_bstr_t,and other form of strings are getting used.Moreover its data is very crucially calculated and tested too.Hence we dont want to change the DLL Code.Only when we hit the DLL number of times,then it crashes unexpectedly.

If we can do something from managed code level from C# code,that will be beneficial.

Thanks again.
0
Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
LVL 86

Expert Comment

by:jkr
ID: 40546595
No, there is hardly anything you could do from managed code. What exactly is the exception that causes the crash?
0
 
LVL 23

Assisted Solution

by:Michael Fowler
Michael Fowler earned 750 total points
ID: 40548105
You could look at disposing the COM object after use with Marshal.ReleaseComObject

This method is used to explicitly control the lifetime of a COM object used from managed code. You should use this method to free the underlying COM object that holds references to resources in a timely manner or when objects must be freed in a specific order.
http://msdn.microsoft.com/en-us/library/system.runtime.interopservices.marshal.releasecomobject.aspx
0
 

Author Comment

by:BYTECHINDIA
ID: 40548230
@jkr, the popup just triggered at server that w3wp.exe stopped working.do you want to debug.when we say ok then again service starts working atleast for some time.Earlier also it happened so many times.

@Michaels,actually I am already using it but I am not sure whether it is fulfilling the requirement or not.
0
 
LVL 23

Expert Comment

by:Michael Fowler
ID: 40548239
Another suggestion is that it well known that when using the Office Interop that you need to release all objects created under the initial com object. When using the office interop it is highly recommended to never use an expression with 2 dots but rather decalre objects for these objects eg

http://msdn.microsoft.com/en-us/library/bb623945(v=office.12).aspx

Something similar could be happening here
0
 
LVL 22

Accepted Solution

by:
ambience earned 750 total points
ID: 40549297
Often there is no easy way to catch and fix such problems. There are a few things worth a try:

Setup Drwatson or enable coredump writing in Windows. This should give you something to analyze under WinDbg, which will at least tell about the nature of crash, exception codes etc.

As for memory issues, you might have to resort to profiling the application using 3rd party tools, open/free or paid.
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.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

When we want to run, execute or repeat a statement multiple times, a loop is necessary. This article covers the two types of loops in Python: the while loop and the for loop.
Article by: evilrix
Looking for a way to avoid searching through large data sets for data that doesn't exist? A Bloom Filter might be what you need. This data structure is a probabilistic filter that allows you to avoid unnecessary searches when you know the data defin…
This tutorial covers a step-by-step guide to install VisualVM launcher in eclipse.
The viewer will learn how to pass data into a function in C++. This is one step further in using functions. Instead of only printing text onto the console, the function will be able to perform calculations with argumentents given by the user.
Suggested Courses

916 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question