Если вы не выделите память для каждой строки, вы получите lineptr
, представляющий собой массив, полный указателей только на последнюю прочитанную строку (не говоря уже о стековой памяти, которая, вероятно, будет перезаписана),Выделение памяти для каждой строки во время чтения имеет смысл для возвращаемого массива.В качестве примера, скажем, что line
происходит в стеке по адресу 0x1000.Если вы сделаете предлагаемое изменение, результирующий массив lineptr
для файла из 8 строк будет выглядеть следующим образом:
0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000, 0x1000
Yowch!Выделение памяти для каждой строки при ее чтении, а затем копирование строки в эту выделенную память - единственное решение.