Массив при присвоении символа заполняется мусором 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. Подскажите пожалуйста, почему так происходит и как это исправить?


Ответы (0 шт):