точно - никак, даже привлечение синтаксиса и семантики (контекста) - не дает 100%
упрощенно:
получаем всевозможные варианты разбиения слова на морфемы, по словарям, это примерно до 20-50 на каждое слово
то же с остальными словами предложения (это мы еще опускаем задачу определения границ предложения)
потом строим граф синтаксических связей (тоже не один, просто формально комбинируем по атрибутам слов), при этом начальные варианты разбиения слов сокращаются до 1-5,
потом - семантика предложения должна отсечь маловероятные графы (не обязательно ошибочные)
нужно или осваивать верстку, либо забить и использовать бутстрап или еще что-то из аналогичных решений
Ни грид ни флекс тебя не спасут от дальнейших проблем
нужны основы
Если правильно понял вопрос, то можно выделить память единым куском под всю матрицу:int* matr = (int*)malloc(n * m * sizeof(int));а к конкретной ячейке обращаться как matr[i * n + j]
тогда и освободить будет просто - free(matr) и все.
а для текущего примера освобождение памяти будет выглядеть так:
void free_matr(int m, int** matr) {
for(int i = 0; i < m; i++) {
free(matr[i]);
}
free(matr);
}