Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

In Section 3.6.6, we examined the following code as a candidate for the use of c

ID: 3864303 • Letter: I

Question

In Section 3.6.6, we examined the following code as a candidate for the use of
conditional data transfer:
long cread(long *xp) {
return (xp? *xp : 0)
}
We showed a trial implementation using a congitional move instruction but argued
that it was not.valid, since it could attemnt to read from a null address.
Write a C function cread_alt that has the same behavior as cread, except
that it can be compiled to use conditional data transfer. When compiled, the
generated code should use a conditional move instruction rather than one of the
jump instructions.

How to solve this? Please let me know the correct answer and why.(simple answer peferred)

Can I do it with just a test of !=null or >0 and <0?

Explanation / Answer

Since it could attempt to read from a null address, the best thing is to make sure that you are dereferencing a valid pointer. In short, remove the possibility of dereferencing a null pointer.

int cread(int *xp)
{
    static const int zero = 0;
    return *(xp ? xp : &zero);
}

Hire Me For All Your Tutoring Needs
Integrity-first tutoring: clear explanations, guidance, and feedback.
Drop an Email at
drjack9650@gmail.com
Chat Now And Get Quote