Program Crashing From Running Too Fast?

D

Daragoth

Hi, I'm writing a program using Metrowerks CodeWarrior 4.0 that
determines the best possible combination of a data set by checking
every possible combination. I found there were about 250,000,000
possibilities and decided to insert a cout in the loop that gave the
percentage that had been completed. The program worked, but I soon
realized it would take almost a month of execution time for it to
finish. I figured the cout was slowing the program down so I decided
to make it occur less by mod'ing the program's overall count number
with a large number in an if statement and seeing if it was equal to 0
and putting the cout inside (ie. if (numTries % 10000 == 0) { cout <<
....; }). However, after doing so the program would crash with code
"c0000005" (I later found even using mod 2 would cause it to crash).
I then commented off the if and cout statements, but it still crashed.
When I put the cout statement back by itself it worked fine again. I
then checked with the debugger to see where it was crashing and it
turned out to be a simple addition assignment without overflow. So my
only idea is that the program is running too fast. But due to the
nature of my program, I need it to run as fast as possible. Anyone
know what causes this to happen and how to fix it?

Also, because I would like to be able to pause the program as well as
send various other user-input commands to it without stopping it, is
it possible for a console window to accept keyboard input without
halting execution of the program? I would prefer not to have to alter
the entire program to have it run in a window. Also, is there an
equivalent in CodeWarrior to the clrscr() statement?

Thanks a lot for any help.

Sincerely,
Darien A. Gothia
 
V

Victor Bazarov

Daragoth said:
Hi, I'm writing a program using Metrowerks CodeWarrior 4.0 that

Usually, in this newsgroup it doesn't matter what you use unless
it is a known bug in the compiler that causes your problems (which
in this case it might be).
[...] Anyone
know what causes this to happen and how to fix it?

I've encountered only one situation in my whole career when changing
the code to output something fixed some problem I couldn't otherwise
detect or debug. It was faulty optimization that the C++ compiler
applied and a variable didn't get its value stored. Adding a printf
or a cout statement caused the optimizer to choke on a long sequence
of statements and not "optimize away" storing the correct value in
memory.

Whether you're experiencing the same situation, I don't know. Try
disabling some optimizations and see if the situation changes. Sheer
speed of an algorithm cannot change the outcome of the system if it
is single-threaded.
Also, because I would like to be able to pause the program as well as
send various other user-input commands to it without stopping it, is
it possible for a console window to accept keyboard input without
halting execution of the program? I would prefer not to have to alter
the entire program to have it run in a window. Also, is there an
equivalent in CodeWarrior to the clrscr() statement?

There is nothing of that sort in the Standard C++ language.

Victor
 
M

Mad Hamish

Hi, I'm writing a program using Metrowerks CodeWarrior 4.0 that
determines the best possible combination of a data set by checking
every possible combination. I found there were about 250,000,000
possibilities and decided to insert a cout in the loop that gave the
percentage that had been completed. The program worked, but I soon
realized it would take almost a month of execution time for it to
finish. I figured the cout was slowing the program down so I decided
to make it occur less by mod'ing the program's overall count number
with a large number in an if statement and seeing if it was equal to 0
and putting the cout inside (ie. if (numTries % 10000 == 0) { cout <<
...; }). However, after doing so the program would crash with code
"c0000005" (I later found even using mod 2 would cause it to crash).
I then commented off the if and cout statements, but it still crashed.
When I put the cout statement back by itself it worked fine again. I
then checked with the debugger to see where it was crashing and it
turned out to be a simple addition assignment without overflow. So my
only idea is that the program is running too fast. But due to the
nature of my program, I need it to run as fast as possible. Anyone
know what causes this to happen and how to fix it?

Your best bet is to find the minimal source that will produce the
error and repost it here.
 
O

Old Wolf

[My program fails when some debugging is added]

However, after doing so the program would crash with code "c0000005"

ISTR this is the Windows code for a segfault.
So my only idea is that the program is running too fast.

Unlikely, to say the least.
Anyone know what causes this to happen and how to fix it?

Most likely, you have a bug in your program elsewhere that causes
memory corruption, and it only shows up under some circumstances.

Post your code (or preferably, the smallest subset of your code
that shows the problem).
Also, because I would like to be able to pause the program as well as
send various other user-input commands to it without stopping it, is
it possible for a console window to accept keyboard input without
halting execution of the program? I would prefer not to have to alter
the entire program to have it run in a window.

You would have to create a background processing thread, or
use a system-specific function that can poll the keyboard
without waiting.
 
D

Dave Vandervies

(e-mail address removed) (Daragoth) wrote:

You would have to create a background processing thread, or
use a system-specific function that can poll the keyboard
without waiting.

Also potentially workable, and less unportable, is to install a handler
for the interrupt signal that sets a "user wants to say something" flag,
and periodically check this flag and stop for user input if it's set.

(The user needs to know to say "Okay, get going again now", since the
program will have to suspend normal operation while it's waiting for
user input.)


dave
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,767
Messages
2,569,573
Members
45,046
Latest member
Gavizuho

Latest Threads

Top