Так здесь дело не в выравнивании памяти, тебе ж компиль прямым текстом говорит, в чём проблема. У тебя двумерный массив, который хранится линейно, а в функцию ты его адрес передаёшь как char ***, внутри же функции у тебя есть такое обращение (*str)[i], а оператор */[] по-разному работает с типами char * * и char [N][K], уже по-моему раз 5 в этом чате этот момент обсуждали.
Для TYPE ** разыменование это получение адреса в указателе с заданным оффсетом, вычисляемого по формуле sizeof(TYPE *) * i, получение по этому адресу необходимого количества байт в соответствии с типом и преобразование их в соответствующий тип TYPE. Для TYPE [N][K] разыменование это вычисление оффсета в линейном пространстве по формуле i * K * sizeof(TYPE), добавление этого оффсета к адресу начала массива и преобразование типа этого адреса к типу TYPE[K].
дело было в 2 часа ночи) то что не испльзую то забываю так скажем пофиксил просто указав явно char (*src)[max_sentences][buffSize] есть ли другой вариант? я там просто выделяют "один" кусок памяти а потом разбиваю
Да, просто скастить указателю на инт и считать ручками смещение
Обсуждают сегодня