Lỗi gì đó khi code C++

mọi người ơi em bị lỗi là em đã khai báo biến d=0 và em cũng chẳng đụng j đến biến d nhưng em in ra lại được d=4, mọi người biết lỗi này là gì và cách sửa như nào ko ạ chỉ em với =(
code của em:

#include <bits/stdc++.h>
#define ll long long
#define ld long double
#define task ""
#define endl "\n"
using namespace std;
ll n,a[100001],d=0;
int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
//    freopen (task".INP","r",stdin);
//    freopen (task".OUT","w",stdout);
    for(ll i=1;i<=100001;i++)
    {
        for(ll j=i;j<=100001;j+=i)
        {
            a[j]++;
        }
    }
    cin>>n;
    while(n--)
    {
        ll k;
        cin>>k;
//        if(a[k]==4) d++;
    }
    cout<<d;
}

mọi người đừng để ý phần define vì em không đăng đc #define nên nó bị vậy

Để viết lại code khác ngắn hơn xem bạn có thể “tự” thấy được vấn đề không nhé:

#include <iostream>
int main(){
    long long a[1]={}, d=0;
    a[1] = 42;
    std::cout << d <<'\n';
}

Link demo: https://wandbox.org/permlink/WoeUjl8plbi2jQtb

3 Likes

Vì khả năng lớn nó đã dính lỗi Buffer Overflow.
Vì d được khai báo sau a nên có thể d nó đã nằm ngay cạnh phần tử cuối của a (phần tử có index = 100000).
Trong vòng for, index đã chạy đến 100001, vượt range của a và rất có thể nó đã truy cập vào vùng nhớ của d.
Sửa:
Trong C/C++, index bắt đầu từ 0, do vậy, for phải như thế này:

for(ll i = 0; i < 100001; i++)

for(ll j = i; j < 100001; j++)
1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?