./Ilia Munaev – Software Engineer

Initialize Variables Upon Definition in C++

Write-up

Uninitialized variables in C++ do not necessarily crash your program.
Instead, they often read whatever happens to be in memory, producing garbage values and silent, non-deterministic bugs.

This is dangerous because the program may appear to work correctly while behaving incorrectly.

Example

#include <array>
#include <iostream>

int main() {
    std::array<int, 5> arr1;     // uninitialized
    std::array<int, 5> arr2{};   // zero-initialized

    std::cout << "arr1 values: ";
    for (std::size_t i = 0; i < arr1.size(); ++i)
        std::cout << arr1[i] << " ";
    std::cout << "\n";

    std::cout << "arr2 values: ";
    for (std::size_t i = 0; i < arr2.size(); ++i)
        std::cout << arr2[i] << " ";
    std::cout << "\n";

    return 0;
}

Build and Run

cat << 'EOF' > main.cpp
#include <array>
#include <iostream>

int main() {
    std::array<int, 5> arr1;    // uninitialized
    std::array<int, 5> arr2{};  // zero-initialized

    std::cout << "arr1 values: ";
    for (std::size_t i = 0; i < arr1.size(); ++i)
        std::cout << arr1[i] << " ";
    std::cout << "\n";

    std::cout << "arr2 values: ";
    for (std::size_t i = 0; i < arr2.size(); ++i)
        std::cout << arr2[i] << " ";
    std::cout << "\n";
}
EOF

g++ -std=c++20 -O0 -Wall -Wextra -Wuninitialized main.cpp -o init_test
./init_test

What You’ll See

  • arr1 prints garbage values from stack memory
  • arr2 prints deterministic zeroes
  • The program exits normally

Why This Happens

  • Stack memory is not cleared
  • Reading uninitialized objects is undefined behavior
  • Results depend on compiler and optimization

Correct Pattern

int x{};
std::array<int, 5> a{};
std::vector<int> v(5);

Security Note

Uninitialized reads commonly lead to information leaks and logic flaws.

Takeaway

Uninitialized variables fail silently.
Always initialize.