Проблема:
char* __T[n];
Если любой другой строковый элемент является динамическим c в вашем коде, это одиночка. Эта переменная (массив строк) размещается в стеке. Таким образом, он будет мертв после завершения функции fillT
. Но вы назначаете ее глобальной переменной перед выходом из функции, тогда в чем проблема? Это порождает большую проблему: Неопределенное поведение .
Глобальный char** T
указывает на то, что уже уничтожено. Попытка доступа к нему внутри обоих циклов - неопределенное поведение. Когда я запустил код, оба цикла дали неправильный вывод. Интересно, как вы получили правильный вывод в первом l oop, может быть, вам просто повезло, потому что неопределенное поведение может означать что угодно.
Решение:
Сделать выделенный стек __T
переменная, выделенная в куче, которая будет работать до тех пор, пока ваша программа не прекратит работу или вы не free
.
замените char* __T[n];
на
char** __T = malloc(n * sizeof(char*));