Как вы сказали, вход в lineptr
- это массив указателей. Надеемся, что все они равны NULL, потому что в противном случае у нас будет утечка памяти, но все же у нас есть наш массив.
p0 | p1 | p2 | p3 |...
alloc
выделяет некоторый кусок памяти размером len
, который (будучи очень свободным с терминологией здесь) «живет» где-то за пределами функции. Он возвращает указатель на эту память. Затем мы можем поместить этот указатель в массив.
Когда функция вернется, вызывающая сторона сможет получить доступ к памяти, выделенной alloc
, которая «живет» вне функции через указатель, хранящийся в массиве.
Если вы можете объяснить более подробно, почему вас беспокоит этот код, возможно, для вас найдется лучший ответ.