Exiting on malloc(3) Failure

To the annoyance of many students learning C programming, allocating memory by calling malloc(3) can fail. When it does, malloc(3) will return NULL. But, what should our program do when a call to malloc(3) fails? The question that today’s blog post explores is: when is it okay for our program to exit(3) — that is, simply terminate — because of a memory-allocation failure?

Better printf(3) Debugging in C

In today’s blog post, we’ll look at one way to improve printf(3) and fprintf(3) debugging in C. Namely, let’s make it so our printf(3) debugging outputs include the name of the source code file, the function name, and the line number where the output happens. Debugging with printf(3) is fast and easy, and it’s not going anywhere; so, let’s just make its output more useful.

Better println() Debugging in Java

In today’s blog post, we’ll look at one way to improve System.out.println() debugging in Java. Namely, let’s make it so our println() debugging outputs include the name of the source code file, the method name, and the line number where the output happens. Debugging with println() is fast and easy, and it’s not going anywhere; so, let’s just make its output more useful.

The Big Three in Java, Part Three: hashCode()

For part three in this series of four blog posts, we look at another one of Java’s “big three” methods: Object.hashCode(). This method returns an integer value that can be used to split objects into buckets. One critical requirement is that any two objects that compare as equal must return the same hash code. We explore how to meet that requirement, while also writing hashCode() methods that are effective and efficient.