A problem with loops
-
VonHagNDaz wrote:
...and OutLen 2692.
So does
Out
have enough room for 2692 characters?VonHagNDaz wrote:
its just randomly that Channel = -1.
Computers never do anything at random. They do exactly what they were instructed to do.
"Approved Workmen Are Not Ashamed" - 2 Timothy 2:15
"Judge not by the eye but by the heart." - Native American Proverb
DavidCrow wrote:
They do exactly what they were instructed to do
You have to use the good ole fashion "tool blame" to keep a small amount of sanity. Yes, it is being allocated the proper space. A coworker has suggested that it might be a memory error where something is writing to that chunk and skewing the number?
I win because I have the most fun in life...
-
DavidCrow wrote:
They do exactly what they were instructed to do
You have to use the good ole fashion "tool blame" to keep a small amount of sanity. Yes, it is being allocated the proper space. A coworker has suggested that it might be a memory error where something is writing to that chunk and skewing the number?
I win because I have the most fun in life...
VonHagNDaz wrote:
A coworker has suggested that it might be a memory error where something is writing to that chunk and skewing the number?
That's what I've been tring to get at for several posts now, but without having any actual numbers, could not be for sure.
"Approved Workmen Are Not Ashamed" - 2 Timothy 2:15
"Judge not by the eye but by the heart." - Native American Proverb
-
VonHagNDaz wrote:
A coworker has suggested that it might be a memory error where something is writing to that chunk and skewing the number?
That's what I've been tring to get at for several posts now, but without having any actual numbers, could not be for sure.
"Approved Workmen Are Not Ashamed" - 2 Timothy 2:15
"Judge not by the eye but by the heart." - Native American Proverb
is there some slick way to see whats going on? ive tried watching that address with the memory view part of the debugger, but it doesnt show where anything is writing to that address.
I win because I have the most fun in life...
-
is there some slick way to see whats going on? ive tried watching that address with the memory view part of the debugger, but it doesnt show where anything is writing to that address.
I win because I have the most fun in life...
Set a breakpoint on any of the statements within the
for
loop. AddChannel
to the watch window. Go through thefor
loop using F5. WatchChannel
at each iteration. Hopefully you'll see it change to -1.
"Approved Workmen Are Not Ashamed" - 2 Timothy 2:15
"Judge not by the eye but by the heart." - Native American Proverb
-
Set a breakpoint on any of the statements within the
for
loop. AddChannel
to the watch window. Go through thefor
loop using F5. WatchChannel
at each iteration. Hopefully you'll see it change to -1.
"Approved Workmen Are Not Ashamed" - 2 Timothy 2:15
"Judge not by the eye but by the heart." - Native American Proverb
I appreciate the help, and im glad you havent just gotten fed up with me, but this loop is called per channel per scanline, so its simply not possible to watch Channel on every iteration. Since this error is not repeatable in the same spot every time, im fairly sure that im just screwed. Thank you for all the suggestions.
I win because I have the most fun in life...
-
I appreciate the help, and im glad you havent just gotten fed up with me, but this loop is called per channel per scanline, so its simply not possible to watch Channel on every iteration. Since this error is not repeatable in the same spot every time, im fairly sure that im just screwed. Thank you for all the suggestions.
I win because I have the most fun in life...
Have you considered:
for (int Channel = 0; Channel < NumberOfChannels; Channel++)
{
if (-1 == Channel)
; // set breakpoint on this lineDat = (unsigned char\*)m\_Dither.Dat\[Channel\]; Out = (unsigned char\*)lpDithered->Data\[Channel\]; ChannelData = &(lpDthrCtrl->Data\[Channel\]); ...
}
"Approved Workmen Are Not Ashamed" - 2 Timothy 2:15
"Judge not by the eye but by the heart." - Native American Proverb
-
Have you considered:
for (int Channel = 0; Channel < NumberOfChannels; Channel++)
{
if (-1 == Channel)
; // set breakpoint on this lineDat = (unsigned char\*)m\_Dither.Dat\[Channel\]; Out = (unsigned char\*)lpDithered->Data\[Channel\]; ChannelData = &(lpDthrCtrl->Data\[Channel\]); ...
}
"Approved Workmen Are Not Ashamed" - 2 Timothy 2:15
"Judge not by the eye but by the heart." - Native American Proverb
all right! i finally got it! let me explain a little bit more about this problem. im working with my company's legacy code, and im not allowed to change it because "it works." what im supposed to be doing is writing an interface to this class. so i tracked the problem down, and it was a call to CoTaskMemAlloc(1024)... why the did they hard code this, and why cant i change it? so basically what i had to do was cut out the call to that function and manually reset all the memory calls to the proper sizes from the interface. i imagine this wasnt a problem when they were processing small images, but now they're using huge digital photo quality images, im tempted to tell my boss whats up, but then ill probably hear an ear full for working around their class that "just works." thanks for the help man.
I win because I have the most fun in life...
-
all right! i finally got it! let me explain a little bit more about this problem. im working with my company's legacy code, and im not allowed to change it because "it works." what im supposed to be doing is writing an interface to this class. so i tracked the problem down, and it was a call to CoTaskMemAlloc(1024)... why the did they hard code this, and why cant i change it? so basically what i had to do was cut out the call to that function and manually reset all the memory calls to the proper sizes from the interface. i imagine this wasnt a problem when they were processing small images, but now they're using huge digital photo quality images, im tempted to tell my boss whats up, but then ill probably hear an ear full for working around their class that "just works." thanks for the help man.
I win because I have the most fun in life...
So exactly how did allocating 1024 bytes, rather than some larger number, mess up what you were doing?
"Approved Workmen Are Not Ashamed" - 2 Timothy 2:15
"Judge not by the eye but by the heart." - Native American Proverb
-
So exactly how did allocating 1024 bytes, rather than some larger number, mess up what you were doing?
"Approved Workmen Are Not Ashamed" - 2 Timothy 2:15
"Judge not by the eye but by the heart." - Native American Proverb
it knew it was supposed to be accessing that memory, but it wasnt allocated properly, so it was overwriting into memory set aside for Channel and LengthInBytes. We (my cube mate, and i) stuck a whole bunch of _Asserts everywhere, and Channel never equaled -1, but as soon as the it set Out = (unsigned char*)lpDithered->Data[Channel]; Channel and LengthInBytes lost their value.
I win because I have the most fun in life...
-
VonHagNDaz wrote:
if (Channel = -1).
:wtf::omg: !!! man, it should be this :
if (Channel
**==**
-1)by using
=
instead of==
, you're assigning it !
[VisualCalc][Binary Guide][CommDialogs] | [Forums Guidelines]
Actually, it should be written thus:
if (-1 == Channel)
so if you mistakenly use
=
instead of==
the compiler will puke. If you get in the habit of putting the constant on the left side of the equation it'll save you many headaches. -
Actually, it should be written thus:
if (-1 == Channel)
so if you mistakenly use
=
instead of==
the compiler will puke. If you get in the habit of putting the constant on the left side of the equation it'll save you many headaches.yeah, i know this, but I don't like it ! lol but for beginners, (for which the chance to fall in the trap is approaching the 100%), they should take this habbit...
[VisualCalc][Binary Guide][CommDialogs] | [Forums Guidelines]