|
It's good coding hygiene to set a deleted pointer to NULL . This will help prevent run-time errors and could make your code simpler.
/ravi
My new year's resolution: 2048 x 1536
Home | Articles | Freeware | Music
ravib@ravib.com
|
|
|
|
|
If there's some function call out there that tells you if a spot in memory is valid that'd be a real easy way of doing this. But I don't know of one.
My suggestion. Make ptr a static member of the foo class. Then, in your foo destructor, if ptr == this, set ptr = NULL.
Tim
|
|
|
|
|
I know I can do this, but I did not want to add a member for this.
Thanks though!
Jerry
|
|
|
|
|
TFrancis wrote:
If there's some function call out there that tells you if a spot in memory is valid that'd be a real easy way of doing this. But I don't know of one.
How about:
IsBadReadPtr()
IsBadCodePtr()
IsBadStringPtr()
IsBadWritePtr()
"The pointy end goes in the other man." - Antonio Banderas (Zorro, 1998)
|
|
|
|
|
Add an operator HWND to the class that returns the window handle and call ::IsWindow.
Christian
I have drunk the cool-aid and found it wan and bitter. - Chris Maunder
|
|
|
|
|
There is already a function to return HWND I think, if this is derived from the window class (I'll have to check tomorrow at work). ::IsWindow is a great suggestion! I was looking for a magical function that would look at a piece of memory and tell me if it had been deleted, but IsWindow should work.
Thanks
|
|
|
|
|
it will not work if the pointer to the dialog is deleteed.
MSN Messenger.
prakashnadar@msn.com
|
|
|
|
|
By it will not work does that mean that it will crash if the pointer has been deleted?
|
|
|
|
|
yes,it will very unpredictable, it may crash in some cases and it will work in some cases. but then working with deleted pointer is very bad idea.
MSN Messenger.
prakashnadar@msn.com
|
|
|
|
|
To determine if a pointer points to readable memory, use the IsBadReadPtr() function. If it returns FALSE, then the pointer cannot be read.
Hope this helps,
Ryan "Punctuality is only a virtue for those who aren't smart enough to think of good excuses for being late" John Nichol "Point Of Impact"
|
|
|
|
|
I just created a static pointer to the window and set it to this in the openWindow function and NULL in the dtor.
Thanks
|
|
|
|
|
Hi all.
Using TCHAR is fine, but i wanted to know if there would be a way of turning UNICODE on for my application (#define _UNICODE does nothing). Needed for testing (I fear LOTS of errors ).
Please help.
|
|
|
|
|
Have you also defined UNICODE (in addition to _UNICODE )? Make sure they are both defined as close to the top of stdafx.h as possible.
With both defined, TCHAR will resolve to unsigned short . Otherwise it will resolve to char .
"The pointy end goes in the other man." - Antonio Banderas (Zorro, 1998)
|
|
|
|
|
Txs. This was fast.
Now how do i get i get sprintf working.
(i do not want to use swprintf because it is unicode only)
For printf there is at least _tprintf , but i can find anything for
sprintf. Is there an euivelent and if not how can i redirect the ourput
to a TCHAR variable.
Thx in advance.
|
|
|
|
|
#ifdef _UNICODE
swprintf(...);
#else
sprintf(...);
#end
"The pointy end goes in the other man." - Antonio Banderas (Zorro, 1998)
|
|
|
|
|
Thx again. Now everything works perfectly but the code is unreadable
|
|
|
|
|
Try looking at this article[^] in the MSDN. It describes the tchar.h mappings, which include _TCHAR equivalents for virtually all of the C runtime string routines.
Software Zen: delete this;
|
|
|
|
|
|
for that u have to change settings.
step1:
go to project->settings->c/c++->cateogery
in that select preprocessor.
in preprocessor defnitions txt box _MBCS to _UNICODE
step2:
in link tab goto category.select output.
in entry point textbox write this
'wWinMainCRTStartup'
Thats all.
|
|
|
|
|
The following gives a weird output:
void test::readtext(myString file)
{
ifstream in;
in.open("data.dat");
myString t;
while (!in.eof())
{
in >> t;
cout << t << " " ;
}
in.close();
}
the file data.dat has three entries:
abc^%tytyr''lkl de$f ghi|j
but the cout prints:
abc^%tytyr''lkl de$f ghi|j ghi|j
also if I count the number of times the loop is traversed, its 4, not 3!
what am I doing wrong?
thanks,
ns
|
|
|
|
|
Problem 1: The cout doesn't match the input
I would guess that either your >> operator for the myString class isn't terminating the incoming string properly, or the << is ignoring the string length/terminator.
Problem 2: The loop is traversed 4 times
If you mean that the condition at the top of the while loop is evaluated 4 times, that would be the case. The first three times, the condition is true, and on the last iteration, the condition is false and the body of the loop is skipped.
If the entire body of the loop is executed 4 times, then I would guess that your file contains data like this:
abc^%tytyr''lkl de$f ghi|j\n
abc^%tytyr''lkl de$f ghi|j\n
abc^%tytyr''lkl de$f ghi|j\n where the \n denotes an end of line character. In that case, it may take 4 reads to get through the data, since the >> operator is probably reading up to (but not including) the end of line. Subsequent >> operations skip over the end of line as whitespace, thereby requiring 4 reads.
Software Zen: delete this;
|
|
|
|
|
Thanks for the help.
|
|
|
|
|
I am trying to determine the amount of time that some functions in my program are taking to execute. I am currently using the clock() function at points before and after the function call being timed, and then dividing the time difference by CLOCKS_PER_SEC. I only seem to be getting three decimal places of precision in the resulting number of seconds. Is this the best way to accomplish something like this? I have included a generic sample below:
Sample:
#include <ctime>
time_t t1,t2;
double time;
t1 = clock();
function();
t2 = clock();
time = difftime(t2,t1) / CLOCKS_PER_SEC;
Thanks,
josh0526
|
|
|
|
|
|
josh0526 wrote:
I only seem to be getting three decimal places of precision in the resulting number of seconds.
Probably because CLOCKS_PER_SEC is 1,000.
"The pointy end goes in the other man." - Antonio Banderas (Zorro, 1998)
|
|
|
|