Массив при присвоении символа заполняется мусором C++
В общем, у меня такая проблема: написал функцию, которая выделяет в памяти двумерный массив (а точнее - массив строк), в котором каждая строка является подстрокой buf, а количество подстрок возвращается в значение N.
В целом код работает и выводит все подстроки, однако, когда я выделяю динамическую память new, у меня почему-то выделяется больше символов, чем нужно, и все они заполняются мусором. Вот сам код:
void split(char*** result, int* N, char* buf[![введите сюда описание изображения][1]][1])
{
int length = strlen(buf);
*N = countStrings(length); // return (1+length) * length /2
char** res{ 0 };
res = new char* [*N];
//result = (char***)malloc(sizeof(char**));
for (int i = 0; i < *N; i++) {
res[i] = 0;
}
if (res) {
//*result = (char**)malloc(*N * sizeof(char*));
for (int k = 0; k < *N;) {
for (int i = 0; i < length; i++) { // start of substring
for (int j = i; j < length; j++) { // end of substring
int len = j - i + 1; // length of substring
res[k] = new char[len];
for (int l = 0; l < len; l++) {
if(res[k])
res[k][l] = buf[i + l];
}
k++;
}
}
}
}
(*result) = res;
}
На скриншоте видно (ввёл слово hello), что при len = 1 выделяется 14 ячеек, потом в первую записывается h. Подскажите пожалуйста, почему так происходит и как это исправить?