ちゃんとした配列

自分で C を使ってプログラミングをしていると、配列の長さを越えてアクセスしてエラーを出すことがある。
これは自分がヘボなせいもあるが、C での配列がちゃんとした配列ではないせいもあるのではないか!? とも考えてもいる。
どこがまずいかというと、配列に「配列の長さ」の情報が含まれておらず、単なるポインタとして扱われてしまうところだと思う。

それを解消した構造体を書いてみる。

typedef struct _KTIntArray {
    int *array;
    unsigned int length;
} *KTIntArray;

(他の型とぶつからないように "KT" を付けてみた。)

しかし、これを型ごとに全て書くのは面倒だな。C++ のテンプレートが出てきた理由を実感。

車輪の再発明だと分かりながらも(苦笑)、一応、関数も書いてみる。

KTIntArray *KTIntArrayConcatenate(*KTIntArray formerArray, *KTIntArray lattarArray){
    KTIntArray *returnArray;
    unsigned int count, length;
        
    length = formerArray->length + latterArray->length;
    returnArray->array = (int *)malloc((length) * sizeof(int));
    returnArray->length = length;
    for (count = 0; count < formerArray->length; count++) {
        returnArray->array[count] = formerArray->array[count];
    }
    for (; count < length; count++) {
        returnArray->array[count] = latterArray->array[count];
    }
    
    return returnArray;
}

まだまだ稚拙なソースなんだろうけれど、ちょこちょこ書いて腕を上げていきたい。