行数、列数が99以下の配列にstdinから読み込んだファイルを配列に格納するプログラムを書いていています。

無事コンパイルが通り期待どおりの結果が実効されるのですが、Abort trap 6エラーメッセージが出てしまいます。

main関数のコード

#include <iostream>
#include <string>

using namespace std;

int main(){
    const int ROW_MAX = 3;
    const int COL_MAX = 3;
    int row_count=0;
    int col_count=0;
    string line;

    char arr[ROW_MAX][COL_MAX];

    while(getline(cin,line)){ //stdinから読み込み
        int l = line.length();

        if(l > COL_MAX){
            cout << "Column size is too big. Try less than " << COL_MAX << endl;
            return 1; //lineが列の数より多きい場合はエラー
        }

        for(int i=0; i<l; ++i) arr[row_count][i] = line[i];

        ++row_count;
        col_count = l;

        if(row_count > ROW_MAX){ // row_countがROW_MAXより大きい場合は読み取るのをやめる
            --row_count;
            break;
        }

    }

    cout << "row_count : " << row_count << endl;
    cout << "col_count : " << col_count << endl;

    cout << "Input table looks like " << endl;

    for(int i=0; i<row_count; ++i){
        for(int j=0; j<col_count; ++j)
            cout << arr[i][j];
        cout << endl;
    }

    cout << "It has " << col_count << " columns and " << row_count << " rows." << endl;

    return 0;
}

stdin するファイルの中身

000
010
000
000

./a.out < ファイル名 の結果

row_count : 3
col_count : 3
Input table looks like 
000
010
000
It has 3 columns and 3 rows.
Abort trap: 6

なぜAbort trap 6が出てしまうのかどなたか教えていただけないでしょうかm(_ _)m