Hi group!
I am using C++ and java with JNI to get some text in a RICHEDIT to my
java program. I do so by accessing a C++ method every second. It all
works fine except that it leaks memory every call I make to the C++
method.
Can anyone please help me with this problem? I am not sure wether the
leakage is in the C++ or java code. But i guess it's on the C++ side
since I'm kind of newbee there.
Is there perhaps a way to release the memory allocated for a LPTSTR in
C++?
Please take a look at the code below, it is the method i call every
second from java. I belive it is the LPTSTR that is leaking, since it
leaks more when the string gets larger.
<---------------
LPTSTR output;
JNIEXPORT jstring JNICALL
Java_JNIHandler _getDealerOutpu t(JNIEnv *env, jobject obj){
size = SendMessage(
(HWND) textarea, // handle to destination window
WM_GETTEXTLENGT H, // message to send
(WPARAM) 0,
(LPARAM) 0 ) +1;
output = new TCHAR[size];
SendMessage(tex tarea,
WM_GETTEXT,
size,
(LPARAM)(void*) output);
return env->NewStringUTF(d ealerStr);
}
------------------>
I have tried to release the memory allocated when the NewStringUTF is
made with the JNI.h method env -> ReleaseStringUT FChars(str,
dealerStr) to no avail.
I hae also tried to use a try/finally block and in the finally set:
output= NULL; delete output; but there is no difference.
Cheers
Andreas
Jul 22 '05
32 4892
John Harrison wrote: "Sambucus" <an************ ***@aetdata.com > wrote in message news:d3******** *************** ***@posting.goo gle.com...
Hi group!
I am using C++ and java with JNI to get some text in a RICHEDIT to my java program. I do so by accessing a C++ method every second. It all works fine except that it leaks memory every call I make to the C++ method.
Can anyone please help me with this problem? I am not sure wether the leakage is in the C++ or java code. But i guess it's on the C++ side since I'm kind of newbee there.
Is there perhaps a way to release the memory allocated for a LPTSTR in C++? Please take a look at the code below, it is the method i call every second from java. I belive it is the LPTSTR that is leaking, since it leaks more when the string gets larger.
<--------------- LPTSTR output;
JNIEXPORT jstring JNICALL Java_JNIHandl er_getDealerOut put(JNIEnv *env, jobject obj){
size = SendMessage( (HWND) textarea, // handle to destination window WM_GETTEXTLEN GTH, // message to send (WPARAM) 0, (LPARAM) 0 ) +1;
output = new TCHAR[size];
SendMessage(t extarea, WM_GETTEXT, size, (LPARAM)(void *)output);
return env->NewStringUTF(d ealerStr);
} ------------------>
I have tried to release the memory allocated when the NewStringUTF is made with the JNI.h method env -> ReleaseStringUT FChars(str, dealerStr) to no avail. I hae also tried to use a try/finally block and in the finally set: output= NULL; delete output; but there is no difference.
finally is not part of the C++ language
Try this
jstring res = env->NewStringUTF(d ealerStr); delete[] output;
It's been a while since I last used JNI, but I think that strings that
you create using NewStringUTF must be deleted (I don't remember the
syntax for this).
Check Sun's web site for more details on NewStringUTF...
JLR
Yoyoma_2 wrote: James Gregory wrote: [...] If you alwaise test on NULL then you are fine. What happends if you need to write to the 0x0 memory area in an albeit wierd platform.
You are wrong. The value 0 when used as a pointer has special defined
semantics in both C and C++. Check the standards for the details.
I'd write more except that:
(a) this is cross-posted into areas where nobody is even slightly interested in
the oddities of the C/C++ standards.
(b) it's a few years since I last attempted public pedantry on these topics, so
I'm a little rusty...
-- chris
Yoyoma_2 wrote: James Gregory wrote: [...] If you alwaise test on NULL then you are fine. What happends if you need to write to the 0x0 memory area in an albeit wierd platform.
You are wrong. The value 0 when used as a pointer has special defined
semantics in both C and C++. Check the standards for the details.
I'd write more except that:
(a) this is cross-posted into areas where nobody is even slightly interested in
the oddities of the C/C++ standards.
(b) it's a few years since I last attempted public pedantry on these topics, so
I'm a little rusty...
-- chris
James Gregory wrote: On Sat, 03 Apr 2004 17:07:10 +0000, Yoyoma_2 wrote:
This isn't java related but alwaise set your variables to NULL, since some platforms could exist that NULL is not defined as 0x0.
I'm sure I've seen someone else on this group before say "Always set your variables to 0 rather than to NULL, some platforms may exist where NULL isn't defined as 0".
NULL must be a constant expression equal to 0. There is absolutely no
difference between using NULL and 0.
4.10 Pointer conversions [conv.ptr]
1 A null pointer constant is an integral constant expression
(_expr.const_) rvalue of integer type that evaluates to zero.
18.1 Types [lib.support.typ es]
[...]
4 The macro NULL is an implementation-defined C++ null pointer constant
in this International Standard (_conv.ptr_).18 0)
-Kevin
--
My email address is valid, but changes periodically.
To contact me please use the address from a recent posting.
James Gregory wrote: On Sat, 03 Apr 2004 17:07:10 +0000, Yoyoma_2 wrote:
This isn't java related but alwaise set your variables to NULL, since some platforms could exist that NULL is not defined as 0x0.
I'm sure I've seen someone else on this group before say "Always set your variables to 0 rather than to NULL, some platforms may exist where NULL isn't defined as 0".
NULL must be a constant expression equal to 0. There is absolutely no
difference between using NULL and 0.
4.10 Pointer conversions [conv.ptr]
1 A null pointer constant is an integral constant expression
(_expr.const_) rvalue of integer type that evaluates to zero.
18.1 Types [lib.support.typ es]
[...]
4 The macro NULL is an implementation-defined C++ null pointer constant
in this International Standard (_conv.ptr_).18 0)
-Kevin
--
My email address is valid, but changes periodically.
To contact me please use the address from a recent posting.
> finally is not part of the C++ language
Try this
jstring res = env->NewStringUTF(d ealerStr); delete[] output; return res;
I guess you are more of a Java programmer than a C++ programmer.
Another method would be to use a vector, then you wouldn't have to worry about memory allocation.
size = SendMessage(tex tarea, WM_GETTEXTLENGT H, 0, 0); std::vector<TCH AR> output(size + 1); SendMessage(tex tarea, WM_GETTEXT, size, (LPARAM)(void*) &output[0]); return env->NewStringUTF(& output[0]);
I'm a bit hazy on the Windows and JNI details but the bottom line is that if you allocate memory with new[] then you have to free it with delete[], and if you use a vector then you don't have to deallocate at all.
john
You are certainly corect about me beeing a Java programer and not C++
;)
I tried the first approach and it worked fine, thank you very much
John!¨
However i had tried to use something like this:
return env->NewStringUTF(o utput);
}
__finally
{
output= NULL;
delete [] output;
size=NULL;
....and it did not work, i guess it has to do with the __finally not
beeing part of c++? but why don't I get compilation a error?
//Andreas
> finally is not part of the C++ language
Try this
jstring res = env->NewStringUTF(d ealerStr); delete[] output; return res;
I guess you are more of a Java programmer than a C++ programmer.
Another method would be to use a vector, then you wouldn't have to worry about memory allocation.
size = SendMessage(tex tarea, WM_GETTEXTLENGT H, 0, 0); std::vector<TCH AR> output(size + 1); SendMessage(tex tarea, WM_GETTEXT, size, (LPARAM)(void*) &output[0]); return env->NewStringUTF(& output[0]);
I'm a bit hazy on the Windows and JNI details but the bottom line is that if you allocate memory with new[] then you have to free it with delete[], and if you use a vector then you don't have to deallocate at all.
john
You are certainly corect about me beeing a Java programer and not C++
;)
I tried the first approach and it worked fine, thank you very much
John!¨
However i had tried to use something like this:
return env->NewStringUTF(o utput);
}
__finally
{
output= NULL;
delete [] output;
size=NULL;
....and it did not work, i guess it has to do with the __finally not
beeing part of c++? but why don't I get compilation a error?
//Andreas
> It's been a while since I last used JNI, but I think that strings that you create using NewStringUTF must be deleted (I don't remember the syntax for this).
Check Sun's web site for more details on NewStringUTF...
JLR
Well i stumbled on info regarding this appearantly by Sun undocumented
memory leakage in JNI when trying to solve my problem.
However this is only when you are sending a java String to the C dll.
In the C code you have to get a C string from the Java UTF chars...
then you must use "env -> ReleaseStringUT FChars(str,outp ut)" to
release it
> It's been a while since I last used JNI, but I think that strings that you create using NewStringUTF must be deleted (I don't remember the syntax for this).
Check Sun's web site for more details on NewStringUTF...
JLR
Well i stumbled on info regarding this appearantly by Sun undocumented
memory leakage in JNI when trying to solve my problem.
However this is only when you are sending a java String to the C dll.
In the C code you have to get a C string from the Java UTF chars...
then you must use "env -> ReleaseStringUT FChars(str,outp ut)" to
release it
function c_str() returns const <CHAR_TYPE> *
"John Harrison" <jo************ *@hotmail.com> wrote in message
news:c4******** *****@ID-196037.news.uni-berlin.de... What John said, but consider using a std::basic_stri ng<TCHAR> instead of std::vector<TCH AR>. The basic string in C++ has more Java-like syntax, e.g. the operator [ ] is range-checked, and concatenation can be done with operator +. But the problem with std::basic_stri ng is that you cannot get a writable pointer from it. Therefore it's not suitable for passing to
SendMessage(win , WM_GETTEXT ...).
john
This thread has been closed and replies have been disabled. Please start a new discussion. Similar topics |
by: frustrated |
last post by:
Before I begin, I must first make the following disclaimer: Although I have
considerable programming experience, I do not consider myself by any means
to be an expert C++ programmer. The following may be nothing more than a
relection of my ignorance. If what I describe is not an actual bug, I would
be very appreciative if you could briefly explain to me how I can de-allocate
memory allocated by a set class, since everything I have tried is...
|
by: Sambucus |
last post by:
Hi group!
I am using C++ and java with JNI to get some text in a RICHEDIT to my
java program. I do so by accessing a C++ method every second. It all
works fine except that it leaks memory every call I make to the C++
method.
Can anyone please help me with this problem? I am not sure wether the
leakage is in the C++ or java code. But i guess it's on the C++ side
since I'm kind of newbee there.
|
by: andylcx |
last post by:
hi all:
I have a code like below, is there any serious memory leakage in my
code. I am confusion now but no idea how to fix it. In the member
function of class A, I create a new object of class B like below:
void A::function()
{
B *newobject = new B;
newobject->....;
newobject->....; //did some action here
|
by: s.subbarayan |
last post by:
Dear all,
I happen to come across this exciting inspiring article regarding
memory leaks in this website:
http://www.embedded.com/story/OEG20020222S0026
In this article the author mentions:
"At a certain point in the code you may be unsure if a particular
block is no longer needed. If you free() this piece of memory, but
continue to access it (probably via a second pointer to the same
|
by: Ramasubbu Ramasubramanian XR (AS/EAB) |
last post by:
What is memory leakage, could any one explain with sample code
| |
by: NewToCPP |
last post by:
Is there any debugging mechanism to find out which part of the code is
causing memory leak?
|
by: kiran kumar |
last post by:
Hi All,
I am working on embedded python on C these days. I feel there is a
memory leakage in this code. I have used our own memory pool and all
the python code will use the heap from this memory pool.
RunScript(pScriptName,pFuncName,...)
{
PyEval_AcquireLock()
threadState = Py_NewInterpreter();
PyThreadState_Swap(threadState);
|
by: madhawi |
last post by:
i want to know that on what situation memory leakage happan and what
is the solution to solve the problem of memory leakage.
|
by: George2 |
last post by:
Hello everyone,
Should I delete memory pointed by pointer a if there is bad_alloc when
allocating memory in memory pointed by pointer b? I am not sure
whether there will be memory leak if I do not delete a.
try {
a = new int ;
|
by: prpradip |
last post by:
I have an ImageList (_imageList). In _imageList I have put large numbers of Icons.
Now what I need is to get Handle of all Icons that I put in _imageList, so that I can destroy (DestoryIcon) them all and release the memory because it's causing Memory leakage.
|
by: marktang |
last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However, people are often confused as to whether an ONU can Work As a Router. In this blog post, we’ll explore What is ONU, What Is Router, ONU & Router’s main usage, and What is the difference between ONU and Router. Let’s take a closer look !
Part I. Meaning of...
| |
by: Oralloy |
last post by:
Hello folks,
I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>".
The problem is that using the GNU compilers, it seems that the internal comparison operator "<=>" tries to promote arguments from unsigned to signed.
This is as boiled down as I can make it.
Here is my compilation command:
g++-12 -std=c++20 -Wnarrowing bit_field.cpp
Here is the code in...
|
by: Hystou |
last post by:
Overview:
Windows 11 and 10 have less user interface control over operating system update behaviour than previous versions of Windows. In Windows 11 and 10, there is no way to turn off the Windows Update option using the Control Panel or Settings app; it automatically checks for updates and installs any it finds, whether you like it or not. For most users, this new feature is actually very convenient. If you want to control the update process,...
|
by: agi2029 |
last post by:
Let's talk about the concept of autonomous AI software engineers and no-code agents. These AIs are designed to manage the entire lifecycle of a software development project—planning, coding, testing, and deployment—without human intervention. Imagine an AI that can take a project description, break it down, write the code, debug it, and then launch it, all on its own....
Now, this would greatly impact the work of software developers. The idea...
|
by: conductexam |
last post by:
I have .net C# application in which I am extracting data from word file and save it in database particularly. To store word all data as it is I am converting the whole word file firstly in HTML and then checking html paragraph one by one.
At the time of converting from word file to html my equations which are in the word document file was convert into image.
Globals.ThisAddIn.Application.ActiveDocument.Select();...
|
by: TSSRALBI |
last post by:
Hello
I'm a network technician in training and I need your help.
I am currently learning how to create and manage the different types of VPNs and I have a question about LAN-to-LAN VPNs.
The last exercise I practiced was to create a LAN-to-LAN VPN between two Pfsense firewalls, by using IPSEC protocols.
I succeeded, with both firewalls in the same network. But I'm wondering if it's possible to do the same thing, with 2 Pfsense firewalls...
|
by: adsilva |
last post by:
A Windows Forms form does not have the event Unload, like VB6. What one acts like?
| |
by: 6302768590 |
last post by:
Hai team
i want code for transfer the data from one system to another through IP address by using C# our system has to for every 5mins then we have to update the data what the data is updated we have to send another system
|
by: muto222 |
last post by:
How can i add a mobile payment intergratation into php mysql website.
| | |