Common pointer errors - Time & Space Complexity
When working with pointers in C, it's important to see how mistakes can affect program speed.
We want to know how pointer errors impact the number of steps the program takes.
Analyze the time complexity of the following code snippet.
void printArray(int *arr, int size) {
for (int i = 0; i < size; i++) {
printf("%d ", *(arr + i));
}
}
int main() {
int numbers[5] = {1, 2, 3, 4, 5};
printArray(numbers, 5);
return 0;
}
This code prints all elements of an integer array using a pointer.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: Looping through the array elements using pointer arithmetic.
- How many times: The loop runs once for each element in the array (size times).
As the array size grows, the number of steps grows in the same way.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | 10 steps |
| 100 | 100 steps |
| 1000 | 1000 steps |
Pattern observation: The steps increase directly with the number of elements.
Time Complexity: O(n)
This means the time to run grows in a straight line with the number of items.
[X] Wrong: "Using pointers always makes the code faster or simpler."
[OK] Correct: Pointer mistakes like wrong addresses or uninitialized pointers can cause errors or slow the program down, not speed it up.
Understanding how pointer errors affect program steps helps you write safer, clearer code and shows you know how to think about program speed.
"What if we changed the pointer to point to a linked list instead of an array? How would the time complexity change?"
Practice
Solution
Step 1: Understand pointer initialization
Pointers must be assigned a valid memory address before use to avoid undefined behavior.Step 2: Identify common mistakes
Using a pointer without initialization can cause crashes or unexpected results.Final Answer:
Using uninitialized pointers before assigning them an address -> Option CQuick Check:
Uninitialized pointer use = common error [OK]
- Dereferencing NULL pointers
- Forgetting to initialize pointers
- Confusing pointer and value assignment
Solution
Step 1: Review pointer declaration syntax
In C, the asterisk (*) goes between the type and the pointer name to declare a pointer.Step 2: Check each option
int *ptr; correctly declares a pointer to int. Options A, B, and D have invalid syntax.Final Answer:
int *ptr; -> Option DQuick Check:
Correct pointer syntax = int *ptr; [OK]
- Placing * after variable name
- Using & instead of * for pointers
- Incorrect order of type and *
int x = 10;
int *p = &x;
*p = 20;
printf("%d", x);Solution
Step 1: Understand pointer assignment
Pointer p points to variable x. Changing *p changes x's value.Step 2: Trace the code execution
*p = 20 sets x to 20. printf prints x, so output is 20.Final Answer:
20 -> Option BQuick Check:
Pointer dereference changes value = 20 [OK]
- Confusing pointer address and value
- Expecting original value unchanged
- Ignoring pointer dereference effect
int *p;
*p = 5;
printf("%d", *p);Solution
Step 1: Check pointer initialization
Pointer p is declared but not assigned an address before use.Step 2: Understand dereferencing consequences
Dereferencing uninitialized pointer causes undefined behavior or crash.Final Answer:
Pointer p is not initialized before dereferencing -> Option AQuick Check:
Uninitialized pointer dereference = error [OK]
- Assuming declaration initializes pointer
- Ignoring runtime crashes from bad pointers
- Misreading error as printf issue
int *p = NULL;
// Some code
printf("%d", *p);Solution
Step 1: Understand NULL pointer risks
Dereferencing NULL pointer causes runtime crash or undefined behavior.Step 2: Apply safe pointer usage
Always check if pointer is NULL before dereferencing to avoid errors.Final Answer:
Check if p is NULL before dereferencing -> Option AQuick Check:
NULL check before dereference = safe code [OK]
- Dereferencing NULL pointer causing crash
- Assigning invalid addresses
- Ignoring pointer safety checks
Ready to prove it?
Pass the test and this pattern moves unknown
