|
When an app crashed, VC displayed a message:
The instruction at "0x00123456" referenced memory "0x00654321" could not be read.
If the error caused by a pointer, I guess, the second value "0x00654321" is the pointer value (such as CWnd*pc; value is (int)pc ), and first value "0x00123456" is memory address where the pointer resides.
Is it correct?
|
|
|
|
|
includeh10 wrote: Is it correct?
Almost. The second number is the address referenced, which bears a relation to the pointer, but is not necessarily exactly the same. For example, a->b uses a pointer of value a , but the actual location referenced is offsetof(the_struct, b) higher. The first number is the address of the failing instruction, which is almost certainly NOT where the pointer lives. The preceding instruction(s) probably fetch or calculate the pointer value to use.
Software rusts. Simon Stephenson, ca 1994.
|
|
|
|
|
The error message means exactly what it says - whatever instruction the processor was executing when the instruction pointer hit 0x00123456 caused the problem. The problem was that it tried reading something at an address of 0x00654321 which wasn't a lump of memory it could read.
So it could be loads of things:
- you tried casting something you shouldn't to a pointer and the variable you cast had a value of 0x00654321
- a pointer contained a value of 0x00654321 and you tried dereferencing it
- you scribbled all over memory using memset and managled a pointer
- you scribbled all over memory and managed to corrupt a thread's stack
- you're trying to use memory that you've freed
- you're accessing a local variable after it's gone out of scope
Whatever it is it's pretty insanitary and might have the unfortunate effect of moving around in memory when you're trying to find it. You might even think you've fixed it when all you've done is move it so that when a customer or professor runs it they find it
To stop this sort of thing happening:
- don't manually manage memory
- don't manually manipulate memory (memset, memcpy, that sort of thing)
- don't use pointers
Cheers,
Ash
|
|
|
|
|
Hi,
CDC* pDc = GetDC();
CSize cSize = pDc->GetTextExtent( "1", 1 );
CRect cRect ( 0, iPadding, cSize.cx, cSize.cy );
pDc->DrawText( "1", 1, &cRect , DT_CENTER|DT_VCENTER|DT_NOCLIP );
The above code displays the text "1" horizontally in cRect .
To display the text vertically, i did as follows:
CFont newFont;
newFont.CreateFont(24, 0, 900, 900, 0, 0, 0, 0, 0, 0, 0, 0, 0, "Arial");
CFont* pFont = pDC->SelectObject(&newFont);
pDC->DrawText("1", 1, &cRect, DT_CENTER|DT_VCENTER|DT_NOCLIP);
pDC->SelectObject(pFont);
newFont.DeleteObject();
But in this case, I couldnt get any text displayed.
Please can someone help me to get the text displayed vertically. How should cRect be manipulated to draw the text vertically?
Mary
|
|
|
|
|
Did you see here or here?
Have you tried playing with different CRect values? You've probably just made the drawing area too restrictive.
"One man's wage rise is another man's price increase." - Harold Wilson
"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
"Man who follows car will be exhausted." - Confucius
|
|
|
|
|
hey guys i am taking some parameters from an initialvalues.ini file and write the new values in it too for the upcoming times. I have learned read/write the .ini files in vc++ and my program works fine with these codes:
[code]
GetPrivateProfileString(_T("Settings"), _T("File_List"), _T("") ,lastsession, 255,
_T("C:\\Documents and Settings\\stajyervestek1\\Desktop\\Copy of Dilara\\Dilara\\initial_paths.ini"));
.
.
.
WritePrivateProfileString(_T("Settings"), _T("File_List"), m_list,
_T("C:\\Documents and Settings\\stajyervestek1\\Desktop\\Copy of Dilara\\Dilara\\initial_paths.ini"));
[/code]
However, i want this program to work in other circumstances, too. mainly, i want this "C:\\Documents and Settings\\stajyervestek1\\Desktop\\Copy of Dilara\\Dilara" part to be the home directory of the user. I tried to write .\\ instead but the program crashed when i tried to use "writeprivateprofilestring". Can you give me any advice to achieve my goal?
thanks in advance
|
|
|
|
|
dilara semerci wrote: However, i want this program to work in other circumstances, too. mainly, i want this "C:\\Documents and Settings\\stajyervestek1\\Desktop\\Copy of Dilara\\Dilara" part to be the home directory of the user.
Sounds like you need SHGetFolderPath() .
"One man's wage rise is another man's price increase." - Harold Wilson
"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
"Man who follows car will be exhausted." - Confucius
|
|
|
|
|
there are tons of examples about this SHGetFolderPath() i tried to read them all but would you mind give me the idea to use it? Thanks in advance
|
|
|
|
|
dilara semerci wrote: ...would you mind give me the idea to use it? Thanks in advance
See here.
"One man's wage rise is another man's price increase." - Harold Wilson
"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
"Man who follows car will be exhausted." - Confucius
|
|
|
|
|
In my program, i want to parse the complete URL string into tokens of hostname, port, file, querystring parameters?.
Is there any generic recommended way of doing it , or any libraries available?
modified on Monday, August 9, 2010 10:16 AM
|
|
|
|
|
|
Have you tried UrlGetPart() ?
"One man's wage rise is another man's price increase." - Harold Wilson
"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
"Man who follows car will be exhausted." - Confucius
|
|
|
|
|
|
I've written a stub dll that I would like to use for testing purposes. I would like to replace the full-feature dll with the stub and be able to run the program without re-compiling.
I have written the stub dll and a little driver program that builds against the full-feature lib but when it runs, it loads the stub dll. Unfortunately that does not work, as it complains it can't find the entry point for the functions.
I ran depends on the driver and I can see that its loading the stub dll as expected, but the calls do not resolve. The calls are listed as "unbound" entry point, but the functions from the dll are being exported.
When I compare the full-feature dll and the stub dll in depends I can see that the entry points for the functions are not the same.
Any ideas what I need to do to make it work?
Thanks.
modified on Monday, August 9, 2010 10:49 AM
|
|
|
|
|
VentsyV wrote: When I compare the full-feature dll and the stub dll in depends I can see that the entry points for the functions are not the same.
Any ideas what I need to do to make it work?
I would have though that is fairly obvious. If you wish your application to run via a stub dll then the stub must contain all the functions that the application tries to link to. How else can the calls be resolved?
It's time for a new signature.
|
|
|
|
|
A MDIParent Wnd has many MDIchild Wnds, and also few child dialogs.
Dialogs are created this way --- CAutoDlg *pDlg = new CAutoDlg; pDlg->Create(IDD_AUTOCARD,this);
I want to cascade only a specific type of dialogs, say dialogs of CAutoDlg type only.
If i give MDICascade() it cascades all the child windows and dialogs under the MDIFrame. Is there any other un-conventional way other than calling SetWindowPos for each dialog, based on the position of the previous dialog?
|
|
|
|
|
Elsie wrote: Is there any other un-conventional way other than calling SetWindowPos for each dialog
Not that I know of, but it should be fairly simple to write your own cascading. Write a function that takes the type of window as parameter (typically CAutoDlg) and iterate over all your child frames/dialogs and position the ones inheriting from the supplied base type using IsKindOf().
|
|
|
|
|
I have developed a project in mfc dialog based vc++, i have put a combobox and added an integer typed variable m_number. I want to use this number in the other methods of the dialog but when i write m_number it takes -1, how can i assign the values in the combobox to that variable so that i can use it?
|
|
|
|
|
dilara semerci wrote: i have put a combobox and added an integer typed variable m_number.
Are the two related ? what is m_number ?
dilara semerci wrote: . I want to use this number in the other methods of the dialog
Put the variable in your dialog class.
dilara semerci wrote: but when i write m_number it takes -1,
Write where ? what ? did you initialize the variable to something ?
dilara semerci wrote: how can i assign the values in the combobox to that variable so that i can use it?
Do you mean the m_number variable is the index of the selected item in the combobox ?
Does the method CComboBox::SetCurSel(int nSelect) looks like something you could use ?
good luck.
M.
Watched code never compiles.
|
|
|
|
|
i see that i must write the previous msg much more clear, the m_number is supposed to be combobox's variable. i used to build comboboxes with cstring variable and do the operations with the selected strings but now i wanted to get my hands into the integer world. Whatever, I found this type of solution to my problem ( my problem was i want the user select the integer that he wants to be the limit in the dropbox, with this limit number, i will create threads and do some other operations. I want 10 to be the lowest limit and 100 the biggest) i did some trick and came with this:
[code]
int limit = m_combo.GetCurSel() +10;
[/code]
i had written the numbers from 10 to 100 in the data slot of the combobox so that the 0-indexed element is 10 and the 90-indexed refers to 100.
|
|
|
|
|
Me think you are over complexity-ing things and make things not very user friendly.
Having a combobox with more than 10, 12 items is hard to use, especially just to select a simple numerical value.
Just use a CEdit and the DDV_MinMaxInt macro.
void CdcdcdDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_EDIT_VA, m_Edit);
DDX_Text(pDX, IDC_EDIT_VA, m_Index);
DDV_MinMaxInt(pDX, m_Index, 10, 100 );
}
and in the InitDialog :
m_number = 22;
UpdateData( FALSE );
or somthing similar.
Watched code never compiles.
|
|
|
|
|
Hi,
I'm using Activex controls (Designed in VB6) in VC++. The Activex control background color is set as White. and in vc++ i'm loading Dialogs which using activex control as Propertypages. the dialogs color will vary at runtime.
so there is mismatching colors between activex controls and my dialogs..
so please help me is there any function available in vb6 or any other solution...?
Waiting for u
|
|
|
|
|
While designing the activeX control itself, the controls for background colors should have been exposed as a property.
|
|
|
|
|
yes, but they have set it as default white.. that's why I'm asking..
|
|
|
|
|
Hi!
I am planning to read and write
data to an EERPOM wired by the
SM-Bus in Windows.
Is this possible by the use of
WMI or do I have to write a driver
by myself?
I found some nice Hardware monitoring
programs here but I am not sure
if it is possible to use them...
(can you give me some hints)?
Kind regards!
|
|
|
|