|
Hey ppl,
I have two pointers and one value:
int* p1 = new int;
*p1 = 10;
int *p2;
p2 = p1;
Now p1 and p2 has different addresses (of course). They both points the same unnamed integer value. Lets delete p1:
delete p1;
p1 = NULL;
Now p1 is NULL and referenced the only integer is deleted. Now if I try
delete p2;
p2 = NULL;
Just crashes cause int which is referenced by p2 is not valid anymore.
So how can I check if int is still valid OR maybe make p2 = NULL when object is deleted.. I read about shared pointers with templated which are not good for me to use right now?
Any workarounds?
|
|
|
|
|
dehseth wrote: p2 = p1;
But, why one would like to do that ? Heard of need for copy c'tor and assingment operators ? Or dangling pointers ?
|
|
|
|
|
Just need it...
|
|
|
|
|
dehseth wrote: I read about shared pointers with templated which are not good for me to use right now?
In case you change your mind: shared_ptr[^] from Boost[^].
Steve
|
|
|
|
|
Nope, but thanx...
|
|
|
|
|
You could always try designing your software so you've got a clear, single owner of resources such as allocated heap memory.
Alternatively,
- Use .NET - garbage collection means you don't need to worry about object ownership quite as much
- Use Objective C 2.0 - it allows garbage collection, and garbage collection means you don't need to worry about object ownership quite as much
- Use the Boehm allocator[^] - it's garbage collected, and garbage collection means you don't need to worry about object ownership quite as much
- As other posters have suggested, use Boost's shared_ptr class.
If you want to stick with Windows and C++, I'd go for designing your software to manage resources or Boost shared_ptrs.
Java, Basic, who cares - it's all a bunch of tree-hugging hippy cr*p
|
|
|
|
|
.NET won't satisfy my needs. Garbage collector slows me down.
|
|
|
|
|
Not as much as pointer errors will
Java, Basic, who cares - it's all a bunch of tree-hugging hippy cr*p
|
|
|
|
|
I have a program that finds trading opportunities. I want to be able to provide the ability to auto fill the order information in third party trade order-entry programs. What is a good place to start to build this? This is on Windows XP.
So far I have looked at GetWindowLongPtr and SetWindowLongPtr. If anybody has any sample code that would be awesome.
|
|
|
|
|
What is the program you are dealing with? Does it have a window with text fields you want to fill in?
If so you do this:
Open the program and reach the top window you want to deal with. The top window is a window with text fields.
Using Spy++ from Visual Studio tools you read the ID for each text field (or other control) that you want to fill in and check what its relation to the top window is
Once you have relation and ID you are very close.
Now in order to get the top window you need its name and/or its relation with the main application window. And then using FindWindow EnumWindows EnumChildWindows... you can reach the top window of each control.
Now you need GetDlgItem to get actual control that you want to fill in. Once you have HWND for each control SetWindowText() is sufficient for most text control, however for radio button etc. you need to use other functions to set the value or state. If you are sure that HWND you've got is from the control you need you can always use CWnd::FromHandle and even better upgrade such CWnd* to CEdit* or whatever control you have.
However once the program is changed and any control ID, or their position is changed, you have to fix your code as well.
The above procedure is used for automated testing a dialog and filling it from another application, so I know it must work.
Without Spy++ or a similar application all this would be almost impossible to complete.
|
|
|
|
|
Greetings to all.
At me a question on structured storages. I have one big file of the order 2 GBytes. I should be able read and write to it quickly. The number of such operations can reach some thousand. I have started to use it in hope that it will work quickly - before instead of one big file there were some tens thousand small ones. Unfortunately reading/writing with it works also slowly. And operations OpenStorage and OpenStream work slowly. Speed of work depends on the size of a file - for not so greater methods IStorage and IStream work fast. I assume, that have collided with restrictions of these objects (IStorage and IStream) and hardly it will be possible to overcome them. But there can be I am mistaken also somebody can prompt as to solve my problem. Or to specify existing equivalents IStorage and IStream which work quickly and them it is possible to use freely (better with an initial code). Below I shall set a brief example of that that I used:
1. Tried to open IStorage with different flags. Has noticed, that speed of work depends on it. Flags STGM_READWRITE, STGM_READ, STGM_WRITE;
2. Method Commit also brakes even if I do not use transacted mode;
3. Root storage I created so:
StgCreateDocfile (T2OLE (csPath), STGM_CREATE|STGM_READWRITE|STGM_DIRECT|STGM_SHARE_EXCLUSIVE, 0, *lpRootStorage);
StgOpenStorage (T2OLE (csPath), NULL, STGM_READWRITE|STGM_DIRECT|STGM_SHARE_EXCLUSIVE, 0,0, *lpStorage);
If at me a small storage file (the exact size I do not remember) methods of interfaces IStorage and IStream work very quickly, from 0 up to some milliseconds. If a file big the operating time can reach hundreds milliseconds.
|
|
|
|
|
You could try Memory Mapped files[^]. If that does not satisfy your performance requirements you might need to consider using a database engine.
|
|
|
|
|
hi..I'm getting this error message when i compile my program. Can anyone help me out to identify
what does the error means??
Thank you.
sqlite3.lib(shell.obj) : fatal error LNK1313: ijw/native module detected; cannot link with pure modules
|
|
|
|
|
I suppose you might get better help on the (managed) C++/CLI forum [^], anyway, have a look at [^].
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
[My articles]
|
|
|
|
|
vanishaa wrote: Can anyone help me out to identify
what does the error means??
See here.
"Old age is like a bank account. You withdraw later in life what you have deposited along the way." - Unknown
"Fireproof doesn't mean the fire will never come. It means when the fire comes that you will be able to withstand it." - Michael Simmons
|
|
|
|
|
when i run the program separately without using .net.. its running fine.. but i embedded it to my program which is running on .net its failing with this error...
|
|
|
|
|
What you have is a linker error, not a runtime error.
"Old age is like a bank account. You withdraw later in life what you have deposited along the way." - Unknown
"Fireproof doesn't mean the fire will never come. It means when the fire comes that you will be able to withstand it." - Michael Simmons
|
|
|
|
|
in the running program common language runtime support was set to no common language support. But my main program which is .NET program is set to pure MSIL common language runtime support. If I set ommon language runtime support to no common language runtime support in the main program which showing multiple error.
|
|
|
|
|
My knowledge of Managed C++ is as near to zero as you can get. You'll need to heed CPallini's advice.
"Old age is like a bank account. You withdraw later in life what you have deposited along the way." - Unknown
"Fireproof doesn't mean the fire will never come. It means when the fire comes that you will be able to withstand it." - Michael Simmons
|
|
|
|
|
hi, there
It's my first time to post a question here to ask for help because the problem is drving me crazy. Everyone who give a direct answer or redirect-url resources is appreciable.
here is the problem:
I decide to grab web-pages from a website, what my policy is that I use a main thread to find many items in a page and i send each item to a thread to deal with. So this is a parallel muti-thread problem. and I find out that the whole process stuck somewhere and the usage of the CPU climed up to 100%. here is the main code that i think is asscociated:
<pre>
HANDLE hSemaThr,hSema,hContent;
main(){
....Handle hCont=CreateFile(....);
hSema=CREATESemaphore(0,1,1,0);
hSemaThr=CREATEMUTEX(0,10,10,0);//this Semaphore is to control thread-buildings so that there are 10 threads in the process at most
WHILE(regex_search(begin,end,stringmatch,r)){
string s=stringmatch[0];
begin=stringmatch[0].second;
WaitForSingleObject(hSemaThr,INFINITE);
CreateThread(0,0,Grab,(void*)dc,0,0);
}
CloseHandle(hCont);
}
void Grab(void* doc){
......
......
WaitForSingleObject(hSema,INFINITE);
if(!WriteFile(::hCont,lpBuf,(int)strlen(lpBuf),&lpN,0)){
cout < <"can't write file in thread" < <GetLastError() < <endl;
//system("pause");
}
ReleaseSemaphore(hSema,1,0);
WaitForSingleObject(hMutexThr,INFINITE);
CanThr--;
ReleaseSemaphore(hSemaThr,1,0);
}
</pre>
Can somebody help me!
Thanks very much!
--Jack
|
|
|
|
|
Do you ever release the mutexes you lock with WaitForSingleObject? Once you are done with it you should call ReleaseMutex[^]. Anyways, the high CPU usage can mean 2 things i think: you either make too many threads, or one or more of your threads are stuck in an infinite loop. Once your program is eating all the CPU power use your debugger to break execution and check what your threads are doing. If there are a lot of items you need to process you are probably better off using a few threads and queuing the items to them rather then creating a hundred-and-twenty-five threads for each and every item you want to process.
> The problem with computers is that they do what you tell them to do and not what you want them to do. <
> Life: great graphics, but the gameplay sux. <
|
|
|
|
|
sorry, when i extrat my code i forget to change some words:
here is the right one and I have release the semaphore in each thread, right in front of "return", and I know the queuing policy is better but I just want to find out what's wrong with my program,by the way at the same time there can only be 10 threads because of my semaphore controling policy.see"//"
main(){
....Handle hCont=CreateFile(....);
hSema=CREATESemaphore(0,1,1,0);
hSemaThr=CREATEMUTEX(0,10,10,0);//so there are only 10 threads at most in the same time
WHILE(regex_search(begin,end,stringmatch,r)){
string s=stringmatch[0];
begin=stringmatch[0].second;
WaitForSingleObject(hSemaThr,INFINITE);
CreateThread(0,0,Grab,(void*)dc,0,0);
}
CloseHandle(hCont);
}
void Grab(void* doc){
......
......
WaitForSingleObject(hSema,INFINITE);
if(!WriteFile(::hCont,lpBuf,(int)strlen(lpBuf),&lpN,0)){
cout < <"can't write file in thread" < <GetLastError() < <endl;
//system("pause");
}
ReleaseSemaphore(hSema,1,0);
ReleaseSemaphore(hSemaThr,1,0);
return;
}
|
|
|
|
|
Please put your code posts between <pre> and </pre> tags for better readability next time.
Did you try breaking the execution to see what your threads are doing when they gabble up the CPU?
> The problem with computers is that they do what you tell them to do and not what you want them to do. <
> Life: great graphics, but the gameplay sux. <
|
|
|
|
|
I'm gonna include a Task Panel (something like the time when you open the Search Window within the Windows Explorer). But I think a CView object _which normally fully occupies the frame window_ is not a good container to that panel (As It's intended to be Document Viewer). I'm solicited to RESIZE the View Window within the Frame Window to fit the panel; but I'm not sure if this is a wise thought or not...
Thank you masters!
|
|
|
|
|
If you're using VC++ 2008, you can get one of those for nowt in the MFC feature pack[^] lookup CMFCTasksPane[^] in the documentation.
Otherwise - is there something in here[^] that would suit?
If none of those are what you want, I'd suggest you find an MFC docking pane implementation and put your Task panel on a docking pane. Or add a splitter to give you two views (one of which could be a form view or something that you paint your task panel on.
I guess I'm basically agreeing with you - you should add a separate window for the pane, and NOT make it part of the view.
Java, Basic, who cares - it's all a bunch of tree-hugging hippy cr*p
|
|
|
|
|