お世話になります。

c++の配列についてよくわからない点が出てきました。
以下のようにコードを書きました。以下のコードで配列にどのような
値が入っているのかを調べようと思いました。

#include<iostream>
const int N = 5;
main(){
    int i=0,a[N];
    for (i=0;i<=N;i++){
        a[i] = i;
    }
    for(i=0;i<=N;i++){
        std::cout << i <<' '<< a[i] << '\n';    
    }
    std::cout << '\n';
}

そして結果が以下のように出力されました。
0 0
1 1
2 2
3 3
4 4
5 5

* stack smashing detected *: ./a.out terminated
中止 (コアダンプ)

このaには出力の結果から{0,1,2,3,4,5}が入っているようですが、
しかしaの要素数は5ですからaに5が入るのはおかしいような気がします。
入るのがおかしい値が、aに入っている理由について教えていただけましたら
幸いです。また中止(コアダンプ)が出てしまう理由も伺いたいです。
よろしくお願いいたします。