|
|
Hallo
After working for years my Software is ready. But it is not running on all Window machines. Especially Win2000 and WinXp cant start the software.
DrWatson tells me ntdll.dll 0x0000005 RtlEnterCritialSection
Ok some Access violation in ntdll but can i figure out what problem i realy have and what to do to fix it.
THX Timen
-- modified at 14:51 Monday 12th June, 2006
So here is the DrWatson result
<br />
*----> Statusabbild für Threadkennung 0x284 <----*<br />
<br />
eax=00000020 ebx=0013f360 ecx=7ffdf000 edx=00000020 esi=00000000 edi=0013f364<br />
eip=7c911010 esp=0013f2f0 ebp=0013f330 iopl=0 nv up ei pl nz na pe nc<br />
cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00000202<br />
<br />
*** ERROR: Symbol file could not be found. Defaulted to export symbols for C:\WINDOWS\system32\ntdll.dll - <br />
Funktion: ntdll!RtlEnterCriticalSection<br />
7c910ffc 0000 add [eax],al<br />
7c910ffe 0000 add [eax],al<br />
7c911000 90 nop<br />
7c911001 90 nop<br />
7c911002 90 nop<br />
7c911003 90 nop<br />
7c911004 90 nop<br />
ntdll!RtlEnterCriticalSection:<br />
7c911005 648b0d18000000 mov ecx,fs:[00000018]<br />
7c91100c 8b542404 mov edx,[esp+0x4]<br />
FEHLER ->7c911010 837a1400 cmp dword ptr [edx+0x14],0x0 ds:0023:00000034=????????<br />
7c911014 754f jnz ntdll!RtlEnterCriticalSection+0x60 (7c911065)<br />
7c911016 f0ff4204 lock inc dword ptr [edx+0x4]<br />
7c91101a 7519 jnz ntdll!RtlEnterCriticalSection+0x30 (7c911035)<br />
7c91101c 8b4124 mov eax,[ecx+0x24]<br />
7c91101f 89420c mov [edx+0xc],eax<br />
7c911022 c7420801000000 mov dword ptr [edx+0x8],0x1<br />
7c911029 33c0 xor eax,eax<br />
7c91102b c20400 ret 0x4<br />
7c91102e 8da42400000000 lea esp,[esp]<br />
7c911035 8b4124 mov eax,[ecx+0x24]<br />
And how to figure out witch thread is meant - or what to do against it ??
THX Timen
|
|
|
|
|
Check the Dr Watson log for more information. Access Violations are a bit too general to be able to narrow down your problem. Any other information about your app would help others help you as well.
If you decide to become a software engineer, you are signing up to have a 1/2" piece of silicon tell you exactly how stupid you really are for 8 hours a day, 5 days a week
Zac
|
|
|
|
|
Are you using any CRITICAL_SECTION s, or using any libraries that use them internally? Also, are you doing any custom heap management?
If the former, I would check to see that valid CRITICAL_SECTION objects are being maintained correctly. If the latter, I would check that all heap HANDLE s are being maintained correctly.
Peace!
-=- James If you think it costs a lot to do it right, just wait until you find out how much it costs to do it wrong! Avoid driving a vehicle taller than you and remember that Professional Driver on Closed Course does not mean your Dumb Ass on a Public Road! DeleteFXPFiles & CheckFavorites (Please rate this post!)
|
|
|
|
|
Can you attach a call stack?
Steve
|
|
|
|
|
Hi again guys
i have a stupit question
lets say i have an array of char
char string[50];
i put some characters in it and then i want to erase the content of the array so i can put some other characters in it
so anyone knows how i erase all the values from the array?
thanks a lot
|
|
|
|
|
If you put characters into array using strcpy function, the old characters will be overwritten by new string; therefore there is no need to erase the old content.
If you want to erase the old content in order to wipe some important information, for instance the password, you can use memset(string, 0, sizeof(string)) .
|
|
|
|
|
If what you want to have is just a null terminated C string. There's simply no need to erase the values of the array. The trailing 0 will be the thing signalling the end of the string. You must be dead sure that your string will never be more than 49 chars long. If not just use one of the string classes.
|
|
|
|
|
|
thanks toxcct
but if i overwrite and the new sequence of characters is smaller than the one before some values will still be in the array
for example if the the first time i insert 30 characters and the second time only 10
i ll have a problem yes?
thanks again
|
|
|
|
|
no, because C-Style strings are NULL terminated ; that means that the last character in the string is the character '\0', so that when this character is encountered, the reader knows he reached the end of the string (whatever bytes remaining in the trailing space of the buffer)...
TOXCCT >>> GEII power
[VisualCalc 3.0 updated ][Flags Beginner's Guide new! ]
|
|
|
|
|
antonaras wrote: i ll have a problem yes?
Only if the presence of characters 10-29 are an issue. If you are dealing with nul-terminated strings, the string-related functions (e.g., strcpy() , strlen() ) will terminate at the first \0 character. Otherwise, no issue.
"The largest fire starts but with the smallest spark." - David Crow
"Judge not by the eye but by the heart." - Native American Proverb
|
|
|
|
|
<br />
const unsigned int MAX_S_SIZE = 50;<br />
char s[MAX_S_SIZE] = {0};<br />
<br />
strcpy(s, "Hello, world!");<br />
<br />
memset(s, 0, MAX_S_SIZE);<br />
<br />
const unsigned int MAX_S_SIZE = 50;<br />
TCHAR s[MAX_S_SIZE] = {0};<br />
_tscpy(s, _T("Hello, World!"));<br />
memset(s, 0, MAX_S_SIZE * sizeof(TCHAR));<br />
As a side note: you don't need to clear a buffer to overwrite it. It is more efficient to just overwrite it with the new data if your requirements allow for it.
If you decide to become a software engineer, you are signing up to have a 1/2" piece of silicon tell you exactly how stupid you really are for 8 hours a day, 5 days a week
Zac
|
|
|
|
|
you said::As a side note: you don't need to clear a buffer to overwrite it. It is more efficient to just overwrite it with the new data if your requirements allow for it.
but if i overwrite and the new sequence of characters is smaller than the one before some values will still be in the array
for example if the the first time i insert 30 characters and the second time only 10
i ll have a problem yes?
Thanks for the help Zac Howland
|
|
|
|
|
If you are reading in character buffers as a whole, yes, you will have a problem. If you are using them as C-style strings, then no, you won't. The reasoning is that C-style strings have a null-terminator.
Example:
const unsigned int ARRAY_SIZE = 20;<br />
char myBuffer[ARRAY_SIZE] = {0};<br />
<br />
strcpy(myBuffer, "My funny String");<br />
<br />
cout << myBuffer << endl;<br />
cout << strlen(myBuffer) << endl;<br />
<br />
strcpy(myBuffer, "Hello");<br />
<br />
cout << myBuffer << endl;<br />
cout << strlen(myBuffer) << endl;<br />
The only time you would run into problems doing this is when you will be looking at the entire character buffer (so all 20 characters) for information. However, in that case, you most likely will not be treating the buffer as a string, and will not be using the strXXX family of functions on it either (or their _tsc equivalents).
If you decide to become a software engineer, you are signing up to have a 1/2" piece of silicon tell you exactly how stupid you really are for 8 hours a day, 5 days a week
Zac
|
|
|
|
|
The standard string-handling functions like strcpy(...) , strcat(...) , sprintf(...) , etc. will write a terminating NUL (not a NULL [^]) into the buffer you are using.
So if you use them, you normally do not have to worry about previous data causing issues (unless you are concerned about security, but that is another issue). Here is an example:
char caBuffer[ 50 ];
strcpy( caBuffer, "A Looooooooong String" );
strcpy( caBuffer, "A Short String" );
puts( caBuffer ); After the first call to strcpy(..) the buffer will contain (NUL is represented by Ø ):
0123456789012345678901</CODE>
<CODE>----------------------</CODE>
A Looooooooong String<CODE>Ø -and after the second call to strcpy(...) , the buffer will likely contain:
0123456789012345678901</CODE>
<CODE>----------------------</CODE>
A Short String<CODE>Ø</CODE>String<CODE>Ø When the string is shown using puts(...) , it will display A Short String , even though the actual memory for the buffer has the extra data in it. Since string-handling functions use NUL as an end-of-string indicator, puts(...) stops when it gets to the first NUL it encounters.
Peace!
-=- James If you think it costs a lot to do it right, just wait until you find out how much it costs to do it wrong! Avoid driving a vehicle taller than you and remember that Professional Driver on Closed Course does not mean your Dumb Ass on a Public Road! DeleteFXPFiles & CheckFavorites (Please rate this post!)
|
|
|
|
|
James R. Twine wrote: write a terminating NUL (not a NULL[^])
You really got a obsession there, right?
"We trained hard, but it seemed that every time we were beginning to form up into teams we would be reorganised. I was to learn later in life that we tend to meet any new situation by reorganising: and a wonderful method it can be for creating the illusion of progress, while producing confusion, inefficiency and demoralisation."
-- Caius Petronius, Roman Consul, 66 A.D.
|
|
|
|
|
jhwurmbach wrote: You really got a obsession there, right?
Yup! It is what separates the wheat from the chaff...
Peace!
-=- James If you think it costs a lot to do it right, just wait until you find out how much it costs to do it wrong! Avoid driving a vehicle taller than you and remember that Professional Driver on Closed Course does not mean your Dumb Ass on a Public Road! DeleteFXPFiles & CheckFavorites (Please rate this post!)
|
|
|
|
|
Why is Zac's answer low-voted? It was an accurate answer, wasn't it?
Regards,
Nish
|
|
|
|
|
Nishant Sivakumar wrote: Why is Zac's answer low-voted? It was an accurate answer, wasn't it?
Yes, it is accurate. Some people get hung up on the terminology (actually, just the spelling) of NUL vs NULL. In my opinion, as long as you know that you are talking about putting a 0 somewhere, it doesn't matter whether you call it a "nul-terminator" or a "null-terminator".
If you decide to become a software engineer, you are signing up to have a 1/2" piece of silicon tell you exactly how stupid you really are for 8 hours a day, 5 days a week
Zac
|
|
|
|
|
Personally, I did not vote you down. Since you have no idea that I did or not, I have to guess that the mentioning my NUL vs. NULL point is but a coincidence - otherwise it would be a highly inappropriate assumption on your part. Also, you will note that even if I did vote you down, there are 4 other votes there as well. Did it ever occur to you that perhaps others know something that you do not? (And that just because you do not know what someone else is talking about, that does not mean that they do not?)
For the record, I voted your two earlier posts a 4. The fact that the first is now below that value may be indicative of something else.
NUL is one thing, NULL (in uppercase) is another. They are not two ways to spell the same thing, even though they have the same value. NUL is the name/mnemonic for an ASCII encoded character with a value of zero. BS , ACK , and NAK are similar characters. I am sure you (should?) know the history of NULL , even in C .
Consider this - my calling "C++" something else, like "G--; that C-ish language with the objects, and references, and virtual thingys" is not correct, even if I know that I am really talking about.
Peace!
-=- James If you think it costs a lot to do it right, just wait until you find out how much it costs to do it wrong! Avoid driving a vehicle taller than you and remember that Professional Driver on Closed Course does not mean your Dumb Ass on a Public Road! DeleteFXPFiles & CheckFavorites (Please rate this post!)
|
|
|
|
|
|
Yep - lots of people also do not come to a complete stop at a stop sign, and still manage to get someplace in one piece. And you should know by now that you should never use or site Microsoft as a model for anything software-related! :P :P :P
Peace!
-=- James If you think it costs a lot to do it right, just wait until you find out how much it costs to do it wrong! Avoid driving a vehicle taller than you and remember that Professional Driver on Closed Course does not mean your Dumb Ass on a Public Road! DeleteFXPFiles & CheckFavorites (Please rate this post!)
|
|
|
|
|
I wasn't referring to you personally. I actually hadn't even read your response yet when I posted that.
On similar topics in the past (not necessarily on this forum, but others), I've been flamed for the nul vs null argument. My point is that as long as the reader understands what you are saying, it doesn't matter how you spell it.
And yes, I'm well aware of the history of ASCII characters ... use to have to use them all the time in my last job (ACK/NAK especially).
If you decide to become a software engineer, you are signing up to have a 1/2" piece of silicon tell you exactly how stupid you really are for 8 hours a day, 5 days a week
Zac
|
|
|
|
|
Personally i found the answer of Zac very accurate and helpful
|
|
|
|
|