15 мая 2023 года "Исходники.РУ" отмечают своё 23-летие!
Поздравляем всех причастных и неравнодушных с этим событием!
И огромное спасибо всем, кто был и остаётся с нами все эти годы!

Главная Форум Журнал Wiki DRKB Discuz!ML Помощь проекту


MFC's CString class odd behavior

MC -- contem00@CAM.ORG
Sunday, December 15, 1996


Environment: MSVC 4.2b Windows NT 4.0

I'm trying to find out why the following code does what it does...

#include 
#include   // comment out this line to avoid memory leak

void main(){
	CString str(""); // or use str() with no quotes to avoid memory leak
}

/*
Detected memory leaks!
Dumping objects ->
{39} normal block at 0x00420D60, 33 bytes long.
 Data: < C              > 00 43 00 CD CD CD CD CD CD CD CD CD CD CD CD CD 
{38} normal block at 0x00420D10, 40 bytes long.
 Data: <  @             > A4 E2 40 00 07 00 00 00 00 00 00 00 00 00 00 00 
{37} normal block at 0x00420BE0, 256 bytes long.
 Data: <                > CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD 
Object dump complete
*/

///////// DTOR can be called explicitly to avoid memory leak ////////
#include 
#include 

void main(){

	CString str();	// This line cannot be str(""); It won't compile with
	str.~str;		// "error C2274: '->' : illegal as right side of '.' operator"
}			// on this line if you try to do so.


Mario Contestabile
mcontest@universal.com





Mast-CBT -- mast@master.csg.it
Wednesday, December 18, 1996

At 20.25 15/12/96 -0500, you wrote:
>
>Environment: MSVC 4.2b Windows NT 4.0
>
>I'm trying to find out why the following code does what it does...
>
>#include 
>#include   // comment out this line to avoid memory leak
>
>void main(){
>	CString str(""); // or use str() with no quotes to avoid memory leak
>}
>
>/*
>Detected memory leaks!
>Dumping objects ->
>{39} normal block at 0x00420D60, 33 bytes long.
> Data: < C              > 00 43 00 CD CD CD CD CD CD CD CD CD CD CD CD CD 
>{38} normal block at 0x00420D10, 40 bytes long.
> Data: <  @             > A4 E2 40 00 07 00 00 00 00 00 00 00 00 00 00 00 
>{37} normal block at 0x00420BE0, 256 bytes long.
> Data: <                > CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD 
>Object dump complete
>*/
>
>///////// DTOR can be called explicitly to avoid memory leak ////////
>#include 
>#include 
>
>void main(){
>
>	CString str();	// This line cannot be str(""); It won't compile with
>	str.~str;		// "error C2274: '->' : illegal as right side of '.' operator"
>}			// on this line if you try to do so.
>
>
>Mario Contestabile
>mcontest@universal.com
>
>
>
>
Change the line

#include 

with

#include 

I had compiled your code with this change in MSVC 4.0 and I had no problem.

Bye,

--------------------------------------------------
Fabio Saponaro
Context Systems Group  -   Italian Branch
Magenta (MI)

Tel. ++ 39 2 97298145
Fax  ++ 39 2 97298225

http://www.web.csg.it
--------------------------------------------------






| Вернуться в корень Архива |