|
Hello all,
I need help here - there's a pointer corruption somewhere (I guess), and the debugger throws me out with the following call stack:
ntdll.dll! 77f75a58()
abababab()
That's it! Could someone tell me how to debug this and see what's happening and where?
Oh, it also says this in the output window:
HEAP[my.exe]: Heap block at 0181FC40 modified at 0182051C past requested size of 8d4
TIA
|
|
|
|
|
There may be cases where due to wrong programming logic may coz errors in the system dlls... you need to check out ur programm properly first.
The World is getting smaller and so are the people.
|
|
|
|
|
Mr.Prakash wrote:
There may be cases where due to wrong programming logic may coz errors in the system dlls... you need to check out ur programm properly first.
Well, I did spend a lot of time checking it out otherwise I wouldn't be asking for help It's narrowed down to one function, but I need to trace through it to see where exactly things go wrong and I can't do that without a callstack. And if I put a breakpoint in that function just before it is supposed to return an error, if overwrites the memory and I never hit my breakpoint, things just assert.
|
|
|
|
|
Are u using MFC or not,
If you are using MFC then make sure that you have not accidently included any cpp file in ur workspace that belonges to the core MFC. other than this i cant help you, I had similar prob (not exact) my program logic was correct but due to inclution of a core mfc cpp file in my project ( which i did accidently) my software used to fail terribaly.
regards,
The World is getting smaller and so are the people.
|
|
|
|
|
Yes, I am using MFC and I'll check if there are any core MFC files included in the project, there are included in my stdafx.h of course, but I guess you mean if it's actually included and shows up in the Solution tab?
I've narrowed the problem to one function that does in-memory array manipulation, but I have no idea why it fails, it looks innocent enough.
Thanks.
|
|
|
|
|
Yeah is any mfc core file included in ur solution, (workspace)
Like i said i had similar prob, when any core file is included, even the most inocent looking code will through exceptions.
The World is getting smaller and so are the people.
|
|
|
|
|
Nope, just checked and there're no core files directly included in my workspace It's a really strange problem.
|
|
|
|
|
That °%$$! happened to me too once. this problem can happen if you use a pointer ( or a pointer to a pointer ....a.s.o. ) incorrectly, like so:
char* lpstr = (char*)malloc(5 * sizeof(char)), *p;
// ...
while( /* sth */ ) *p++ = *lpstr++;
// ...
strcpy(lpstr, "12345");
// or
free((void*)lpstr);
so check out step-by-step if your variable remains at it's original position.
don't no if this could help you out...
Phil
|
|
|
|
|
Thank you for the reply - there's actually a similar code that modifies the variable in question... And that's what's causing the problem, I guess. I have been staring at it for a day now, I guess I'll do so some more Perhaps it sometimes adds one extra pointer and moves it beyond the boundary...
|
|
|
|
|
You need the debugging symbols for your platform.
NTDLL and many other system DLLs are compiled with an option called Frame Pointer Omission turned on. When compiling a function, the compiler normally uses the EBP register to point to the beginning of the function's local registers on the stack (the frame), storing the old value of EBP at the top of the stack first. However, if this optimisation is turned on, the compiler can decide to omit the set-up and tear-down of EBP - this also allows it to use EBP for other purposes. When it does this, it notes the fact in the debugging information, if any is generated.
The debugger takes one of two approaches in walking a stack. If it has debugging information, it consults to see if FPO data is available for the function - this tells it where to find the beginning of the frame and therefore where the return address is stored (and what the return address is). Otherwise, if there is no FPO data or no debugging information, it looks for the return address in a memory location near the value of EBP. In this case, EBP is pointing somewhere other than at the stack.
To fix this, get the OS debug symbols. You have two options: you can either download a full symbol pack[^], or you can use Microsoft's symbol server[^] to download only the required symbols. If you have Visual C++ .NET (2002 or 2003), you can use the symbol server; see Using a Symbol Server[^] in the VS.NET documentation.
If you're using VC6, you'll have to use the full symbol package or download the Debugging Tools for Windows[^], and use WinDBG to debug instead.
Symbol packages have the unfortunate disadvantage that they're only updated for each OS service pack. They're not updated for individual hotfix or security patch releases - hotfix packages used to contain updated symbols for that hotfix, but this seems to have been dropped recently.
I suspect that you're stopped inside the Windows heap management code because a heap block has become corrupted (which is the message you got in the output window). If an executable is marked as Debug, Windows checks heap allocations and deallocations more thoroughly, and breaks into the debugger if there's a problem. To pinpoint the problem, it can help to enable the Page Heap mode.
In this mode, the Windows heap manager code allocates every block on its own memory page, with an extra page set to no access straight afterwards. It allocates the actual block at the end of the read/write page, so that if you overrun the allocated block, you get an access violation immediately.
You can enable Page Heap mode using the gflags tool, but it's easier to use along with other useful application testing tools as part of the Windows Application Compatibility Toolkit[^].
|
|
|
|
|
Thank you - I'm using VC++ 2002, and I'll check out your suggestions on heap debugging. In Debug mode the program reports this error, in Release is just silently throws me out back to Windows (which is understandable).
|
|
|
|
|
Hi ,
I have a docking window but i want to restrict to always behave as docking window and should become floating at all.
Regards,
KK
|
|
|
|
|
Hi all!
I want to call execlp("ls","ls","-tl",(char*)0);
but I also want to redirect the output to a file or a buffer or something. does anyone know of a way to get the output from exec?
by the way I tried this way of piping
execlp("ls","ls","-tl",">",filename,(char*)0);
but this does not work.
Thanks in Advance
|
|
|
|
|
Seeing as 'ls' only exists on Unix, then I will assume that is the platform you are programming for. To control the standard output/input you need to do change the target for them in the child process (you should be using fork if you are using execl). This can be achieved with the 'dup2' command:
int myfd = open ("somefile.txt", O_CREAT | O_WRONLY, 0777);<br />
<br />
dup2 (myfd, STDOUT_FILENO);
This re-maps the stdout output to your own file. You can then call 'execlp' to load ls, and the output will go to your file
|
|
|
|
|
Hi all,
I've have added a CDialogBar to my SDI window,but all the push button like controls are disabled,even if dynamically enable them(with the EnableWindow() function), they just remain disabled while all the other controls are working properly.
[source]
CFrameWnd *cFrame = NULL;
cFrame = this->GetParentFrame();
if(!m_GameDlgBar.Create(cFrame,
IDD_GAME_DLG_BAR,
WS_CHILD | WS_VISIBLE | CBRS_RIGHT IDD_GAME_DLG_BAR))
{
AfxMessageBox( "Unable to create m_GameDlgBar\n"
+GetErrorString());
return ;//FALSE;
};
m_GameDlgBar.EnableButtons();
and then the function EnableButton's def.
void CGameDlgBar::EnableButtons()
{
HWND hWnd;
GetDlgItem( IDC_PASS, &hWnd);
::EnableWindow(hWnd, TRUE);
GetDlgItem( IDC_SEND, &hWnd);
::EnableWindow(hWnd, TRUE);
//m_Send.EnableWindow( TRUE );
//m_Pass.EnableWindow( TRUE );
}
[/source]
Any help?
|
|
|
|
|
Hi everyone,
i am writing a small app. which asks for a password whenever i click on a folder,file and any drive.
If u guys have any suggestions,please reply ASAP!!
Thanx,
Kapil
|
|
|
|
|
You need to do that by manupulating the registery values of OPEN verb, i can only give you this much information or guide.
By the way is ur password system of any help? how are you protecting the folder,if the user accesses it from command promt. all these things will fail.
Then you need to write a device driver or your own files system to protect the folders.
Destroy the constitution coz they make the politicians.
|
|
|
|
|
Anyone out there who knows how to determine the PageFile Size / Usage of computer? (Windows 2000/NT/XP)
|
|
|
|
|
Performance Counters?
(Answer given without consultation of documentation so forgive me if I'm way off base.)
Anyone who thinks he has a better idea of what's good for people than people do is a swine.
- P.J. O'Rourke
|
|
|
|
|
|
I am looking for a control that I use to build a view of an indented Bill Of Material where the folder represents an assembly and items are under the folders. Can be nested as many levels as necessary. It would be nice to be able to search the control for the existence of any part number or description. Any suggestions?
|
|
|
|
|
Dear all,
I have a quarrel with my friend as bellow:
In object oriented programming we declare a class:
class CAA
{
public:
CAA();
void DelMyself()
{
delete this;
}
private:
virtual ~CAA();
}
I said that no body do at that. But he said it is used a lot of in MFC.
in this situation you only declared pointer of class CAA not declare a object.
Please give some comemnt.
Thanks a lot,
|
|
|
|
|
Chau Ngoc Vo wrote:
about C++
Um... a question about C++ in the C++ forum, who would have thought ? You'll get more readers if you actually say something in your headers.
Chau Ngoc Vo wrote:
I said that no body do at that. But he said it is used a lot of in MFC.
Did either of you think to actually type this into a compiler and see what it spits back ?
Your friend is right. If it's used in MFC or not, I don't know.
Christian
I have drunk the cool-aid and found it wan and bitter. - Chris Maunder
|
|
|
|
|
It's often used in MFC and ATL where instances are stored in a OS objects that have no knowledge of C++.
Anyone who thinks he has a better idea of what's good for people than people do is a swine.
- P.J. O'Rourke
|
|
|
|
|
It's used in CFrameWnd in PostNcDestroy. CFrameWnds should always be created with new, so it can call "delete this" as the last thing it does before the window is gone.
|
|
|
|