#include <stdio.h>
int main ()
{
int A[10];
int *B;
int i;
for (i=0; i<10; i++) {
A[i] = 1;
}
for (i=0; i>10; i++) {
B[i] = A[i];
}
}
The program has an error. Upon compilation (with, say, gcc)
we get:
% gcc -o example example.c % example Segmentation fault (core dumped)To catch the error, let's try adding print statements: (source file)
int main ()
{
int A[10];
int *B;
int i;
printf ("Before first for-loop\n");
for (i=0; i<10; i++) {
A[i] = 1;
}
printf ("After first for-loop\n");
for (i=0; i<10; i++) {
B[i] = A[i];
}
printf ("After second for-loop\n");
}
Upon execution, it is quite possible that you won't see
anything printed, or will see only a part of the output:
To force output to be written immediately, use fflush():
(source file)
int main ()
{
int A[10];
int *B;
int i;
printf ("Before first for-loop\n");
fflush (stdout);
for (i=0; i<10; i++) {
A[i] = 1;
}
printf ("After first for-loop\n");
fflush (stdout);
for (i=0; i<10; i++) {
B[i] = A[i];
}
printf ("After second for-loop\n");
fflush (stdout);
}
Upon compilation and execution, we see the following output:
% gcc -o flush flush.c
% flush
Before first for-loop
After first for-loop
Segmentation fault (core dumped)
Now we know the seg-fault occurs in the second loop.
Exercise 1: What is the error above? Show how you would use a debugger to find the error. What fflush() does:
Exercise 2:
If stdout can be treated like a file, can one
use this in fprintf()? Find out what happens
with the following code:
printf ("Hello ");
fprintf (stdout, "World!\n");