Consider the following ANSI C program: #include < stdio.h > #include <…
2021
Consider the following ANSI C program:
#include < stdio.h >
#include < stdlib.h >
struct Node{
int value;
struct Node *next;};
int main( ) {
struct Node *boxE, *head, *boxN; int index=0;
boxE=head= (struct Node *) malloc(sizeof(struct Node));
head → value = index;
for (index =1; index<=3; index++){
boxN = (struct Node *) malloc (sizeof(struct Node));
boxE → next = boxN;
boxN → value = index;
boxE = boxN; }
for (index=0; index<=3; index++) {
printf(“Value at index %d is %dn”, index, head → value);
head = head → next;
printf(“Value at index %d is %dn”, index+1, head → value); } }
Which one of the following statements below is correct about the program?
- A.
Upon execution, the program creates a linked-list of five nodes.
- B.
Upon execution, the program goes into an infinite loop
- C.
It has a missing return which will be reported as an error by the compiler
- D.
It dereferences an uninitialized pointer that may result in a run-time error
Attempted by 101 students.
Show answer & explanation
Correct answer: D
Conclusion: The program dereferences an uninitialized pointer (undefined behavior) when it attempts to access the next pointer of the last node.
Why:
Four nodes are allocated: one before the loop (value 0) and three inside the loop (values 1 through 3).
Each allocation links the previous node to the new node, but the final node's next pointer is never initialized (it contains an indeterminate value).
In the printing loop, the code advances head to head->next and then immediately dereferences head->value. On the last iteration this advances head into an indeterminate pointer and the subsequent dereference causes undefined behavior (possible crash).
Trace of the printing loop (high level):
Iteration 0: prints value 0, advances head to node with value 1, prints value 1.
Iteration 1: prints value 1, advances head to node with value 2, prints value 2.
Iteration 2: prints value 2, advances head to node with value 3, prints value 3.
Iteration 3: prints value 3, advances head to the last node's next (indeterminate), then attempts to print the value through that pointer — undefined behavior occurs here.
How to fix the code:
When you create a new node, initialize its next pointer to NULL (e.g., boxN->next = NULL) before linking it.
After finishing the construction loop, explicitly set the final node's next to NULL (for example, boxE->next = NULL).
When printing, consider using a temporary pointer to traverse the list so the original head pointer is preserved if needed.
Additional note: omitting a return statement at the end of main is not generally a compiler error in modern C standards (main returns 0 implicitly). This is not the cause of the runtime failure in this program.
A video solution is available for this question — log in and enroll to watch it.