|
NEVER use free unless you use malloc and NEVER use malloc if you're using C++.
Christian Graus - Microsoft MVP - C++
|
|
|
|
|
Why? I always automatically use 'new' and 'delete' in C++, but i'm just curious what your 'motivations' are for not using 'malloc' and 'free' in C++.
Er zit een korstje op mijn aars.
|
|
|
|
|
new and delete use constructors/destructors and let you make full use of OO, malloc and free only control memory.
Elaine
The tigress is here
|
|
|
|
|
If you are using objects, which have constructors and destructors, malloc() and free() will not work. The new and delete operators will, however. Allocating room for other types such as int , char , and double will work just fine with malloc() and free() .
"One must learn from the bite of the fire to leave it alone." - Native American Proverb
|
|
|
|
|
1. NEVER use free or malloc in C++
2. Never write your own linked list class for production, use std::list.
3. It's good to write one though, to learn. If you want to remove an item from the list, you delete the someStruct in question, and you take the item that is before it, and change it's nextElement pointer to the item after it.
Christian Graus - Microsoft MVP - C++
|
|
|
|
|
Christian Graus wrote:
1. NEVER use free or malloc in C++
Unless you're overloading operator new
Regards
Senthil
_____________________________
My Blog | My Articles | WinMacro
|
|
|
|
|
Hi might be doing his college project rite, so using list and other std templates would defeat the perpose of using the list.
-prakash
|
|
|
|
|
Mr.Prakash wrote:
Hi might be doing his college project
Yes, that's why I said, it's a good idea to write these things to learn, but once he enters the real world, he shouldn't be using his own list class.
Christian Graus - Microsoft MVP - C++
|
|
|
|
|
How can someone update the data in a modeless window?
I write this to show the dialog..
Class *dlg=new Class;
dlg->Create(IDD_INFO_DIALOG);
dlg->ShowWindow(SW_SHOW);
and to update something I write:
dlg->m_data=newdata;
but it doesn't update the data..
How can I update them.. UpdateData doesn't work also..
thanks..
|
|
|
|
|
You shouldn't expose data in a dialog, you should expose methods that take the data, and also call UpdateData or Invalidate to cause it to be painted.
Christian Graus - Microsoft MVP - C++
|
|
|
|
|
The code goes like this:
<br />
ImInfo *info;<br />
info=new ImInfo;<br />
info->Create(IDD_INFO_DIALOG);<br />
info->ShowWindow(SW_SHOW);<br />
UpdateInfo();<br />
<br />
where:<br />
void UpdateInfo()<br />
{<br />
....calcylating the data...<br />
<br />
bool ret=info->transfer(file,width,numy,size,bpp,ctype);<br />
if (!ret)<br />
AfxMessageBox("Cannot transfer data");<br />
}<br />
<br />
and:<br />
bool ImInfo::transfer(CString imagefile, int width, int height, int size, int bpp, CString ctype)<br />
{<br />
m_filename=imagefile;<br />
m_xres=width;<br />
m_yres=height;<br />
m_filesize=size;<br />
m_bpp=bpp;<br />
m_ctype=ctype;<br />
UpdateData(FALSE);<br />
<br />
return TRUE;<br />
}<br />
Is there any mistake here? It doesn't work
|
|
|
|
|
bool and BOOL are not the same thing. Also, why have a function returning bool, if it never checks anything ?
But apart from that, I don't see why this would not work. Try adding a call to Invalidate(); before you return true ( not TRUE ), and if that does not work, then I don't know.
Christian Graus - Microsoft MVP - C++
|
|
|
|
|
It worked.. I wanted to return something to see if it's the function's problem..
Thanks anyway!
|
|
|
|
|
I am trying to learn C++ .net. I have done a little with VBA and VB.net.
I bought Visual C++ .net for Dummies. I was trying one of the programs in the book. I using Visual Studio .net 2003.
The example in the book is an example of an unmanaged C++ program.
So I created a Win32 Project. I also tried creating a Win32 Console Project and a C/C++ Console Application. Below is the code I typed in. This is the code from the Dummy book. And I am getting a Build error. And I also tried to build the project that is on the actual CD from the dummy book.
//HelloWorld2
// Prints hello world on the screen
//Unmanaged
#include "stdafx.h"
#include <iostream.h>
int _tmain(int argc, _TCHAR* argv[])
{
//Write to the screen
cout << "Hello World\n";
return 0;
}
Here is the error I am getting:
fatal error C1083: Cannot open include file: 'iostream.h': No such file or directory
c:\Documents and Settings\steve\Desktop\Code\HelloWorld2\HelloWorld2.cpp(6):
I reinstalled Visual Studio but I guess that was not the problem. I also searched my computer for iostream.h. It did not find the file. I went to the folder vc7 and then the include folder. I found iostream but it was not iostream.h.
Does anyone have any suggestions. Is there a difference in using Visual C++ .net and C++ .net in Visual Studio?
Thanks for any help.
Steve
|
|
|
|
|
IIRC, iostream.h is deprecated, the following code must work.
<pre>
#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
//Write to the screen
cout << "Hello World\n";
return 0;
}
</pre>
Regards
Senthil
_____________________________
<font face="Verdana" size=1><a href="http://blogs.wdevs.com/senthilkumar">My Blog</a> | <a href = "http://www.codeproject.com/script/articles/list_articles.asp?userid=492196">My Articles</a> | <a href = "http://geocities.com/win_macro">WinMacro</a></font>
|
|
|
|
|
I have a problem displaying tooltips of controls e.g. edit fields which are part of a modal dialog using VS .NET 2003. The tooltips will be displayed without any problem if I'm using VS 6.0. Using VS .NET 2003 Professional, some of the tooltips will be displayed, some not. The source code is 100% identical. I'm using the following source code implemented in a CDialog based class:
Message Map:
ON_NOTIFY_EX(TTN_NEEDTEXT, 0, OnToolTipNotify)
// Message Handler
BOOL ... ::OnToolTipNotify (UINT id, NMHDR* pNMHDR, LRESULT* pResult)
{
TOOLTIPTEXT *pTTT = (TOOLTIPTEXT*) pNMHDR;
UINT nID = pTTT->hdr.idFrom;
if ((pTTT->uFlags & TTF_IDISHWND) == TRUE)
{
nID = ::GetDlgCtrlID ((HWND) nID);
...
}
... }
Using VS 6.0 it works fine, but not in VS .NET 2003. I found in the debug mode that the message handler will be not started for the controls where I'm missing the tooltips. I don't know why.
It seems for me that .NET 2003 Professional has a bug. Is this problem known ? Has anybody a solution ? Many thanks for your help.
Ulrich
|
|
|
|
|
You may put a breakpoint in the implementation of CWnd::OnToolHitTest (it's inside [Visual Studio Install directory]\VC\atlmfc\src\mfc\wincore.cpp) and see if you can determine whether it's returning a hit for those controls, and if not, why.
--
jlr
http://jlamas.blogspot.com/[^]
|
|
|
|
|
Hi,
i've started working on VC++ recently and i'm developing an application in which the menu items in the main window has to be changed when a button on a dialog is pressed. i tried LoadMenu and SetMenu but the new mwnu getz loaded on the dialogbox itself instead on the main window.i'm sure that there must be a way to do this.could anyone help me in this please.thankyou.
rajeev
|
|
|
|
|
Have the button do this:
AfxGetMainWnd()->SetMenu(*MyMenu);
|
|
|
|
|
Hi!
in a Subclassed Cedit Control, I issued a SetWindowText() function many times in my program..
I traced my program, Now In the first call to SetWindowText(), the function succeeds and it sets the text .. Now on the second call the function asserts, and upon tracing, The ::IsWindow(hwndofCedit) returns FALSE.
My question when does an HWND becomes invalid? aside from window destruction?.. My Cedit's parent is not a CDialog, would that be an issue?
"geez i cracked myself off.."
|
|
|
|
|
A HWND becomes invalid when the windows is destroyed.
Sorry, but there is no 'aside', either the window exist or it does not. I will note however that the windows destruction has nothing to do with wether or not the destructor for a CWnd object is called. The handle belongs to the system and not the code using it. Therefore, you must be telling the system to destroy the window.
And no: the parent of the window is not an issue, unless the parent window was closed, in which case, all its child windows would also be closed (destroyed).
INTP
"The more help VB provides VB programmers, the more miserable your life as a C++ programmer becomes."
Andrew W. Troelsen
|
|
|
|
|
But why is it that when I test ::IsValidWindow(CEdit::GetSafeHwnd()), it returns FALSE in the middle of my program, and I have not destroyed the CEdit yet..
I have seen in some articles that there are some events that makes the window handles invalid..
|
|
|
|
|
There are only two things that can happen here, if IsValidWindow returns TRUE and then soon after returns false, either the window is destroyed or the value that CEdit::GetSafeHwnd() returns is now wrong. This can happen if the CWnd data structure gets trashed. Look at the m_hWnd value and see if it changes.
Tim Smith
I'm going to patent thought. I have yet to see any prior art.
|
|
|
|
|
I can tell you that the window was not destroyed.. so definiteyly my problem is GetSafeHWnd() changing to a wrong value.. My question is how did it changed value? how did the window structure get trashed? I Didn't do anything to it... I just set its text..
|
|
|
|
|
Hello...
I known only two situations where a window handle is invalid.
1. window isn't created
2. window destroyed
It's possible that window creation or subclassing failed...
|
|
|
|