Giá trị rác khi không khởi tạo biến C++

Dạ cho em hỏi đoạn code này với ạ.
em dùng code này em run trên vsc :

#include <iostream>
using namespace std;
int gcd(int a, int b){
    if (a == 0 || b == 0){
        return a + b;
    }
    while (a != b){
        if (a > b){
            a -= b;
        }else{
            b -= a;
        }
    }
    return a;
}
int main(){
    int n;
    cout<<n;
    int arr[n];
    cin>>n;
    int dem =0;
    for(int i=0;i<n;i++){
        cin>>arr[i];
      for(int j=0; j<=i;j++){
            if(gcd(arr[i],arr[j]) == 1 && arr[i] != arr[j]){
                dem++;
            }
        }  
    }
}

thì in n là bằng 0;
Còn đoạn này thì in ra giá trị rác của n:

#include <iostream>
using namespace std;
int gcd(int a, int b){
    if (a == 0 || b == 0){
        return a + b;
    }
    while (a != b){
        if (a > b){
            a -= b;
        }else{
            b -= a;
        }
    }
    return a;
}
int main(){
    int n;
    cout<<n;
    int arr[n];
    cin>>n;
    int dem =0;
    for(int i=0;i<n;i++){
        cin>>arr[i];
    }
}

Em cố tình để cái arr[n] ở đằng sau cin>>n; (giá trị rác n quá lớn , mà đặt khởi tạo mảng trong main với chỉ số lớn làm ngừng chương trình) nên mọi người không cần chỉ chỗ sai này đâu ạ.
Em thắc mắc là tại sao khi khôgn khởi tạo thì cả hai đều in ra giá trị rác chứ ạ.

giá trị rác là giá trị lúc trước của thanh nhớ ở vị trí int n đó. Nhiều khả năng nó bằng 0 :V Em thử gọi thêm nhiều hàm khác trước khi nhảy vào int n đó thì khả năng nó là giá trị khác 0 nhiều hơn

2 Likes

dạ vâng, em tìm được nguyên lí rồi à.

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?