В код сильно не вчитывался, но зачем две звездочки в return ** _ARRAY;?
Указатель дважды разименовывается и получается char.
Функция возвращает char** и _ARRAY имет тип char**, вот и возвращаться нужно прямо _ARRAY, т.е.
return _ARRAY;
и все.
Вообще писать в глобальные перемынные, мягко говоря, не хорошо
По поводу самой функции - не знаю ваши конкретные требования к этой функии, но не проще ли собрать указатели на начала строк (т.е. db[0] - будет указывать на первый символ исходной строки, db[1] на символ следующий за первым символом перевода строки) и заменить переводы строки нулями?