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);
}
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.