blockquote>char **str; char *tr; int cnt, k; cnt = k = NULL; printf("Enter number fo strings:\n"); scanf("%d", &n); for (int i = 0; i < n; i++) str[i] = (char*)malloc(sizeof(char)*n); // here
вы используете
str
, который неинициализирован. Что вы ожидаете?str
имеет неопределенное значение, поскольку оно неинициализировано и почти наверняка содержит недопустимое значение указателя. Разыменование недействительного указателя (что делает оператор[]
) - это неопределенное поведение.То, что вам нужно сделать, - это сначала выделить память для
str
для хранения указателей на строки.Кстати.
blockquote>puts("Enter The strings"); for (int i = 0; i < n; i++) { for (int j = 0; i < n; j++) scanf("%s", &str[i][j]); }
также неверно. Внутреннему циклу нет необходимости читать входные данные из stdin и сохранять их в
str[i]
. Кроме того, не используйте%s
без указания с, чтобы ограничить количество символов, записанных в место назначения.blockquote>if (str[i][j] >= 'a' && str[i][j] <= 'z')
Вот для чего
islower()
из<ctype>
.blockquote>free(str);
Этого недостаточно для освобождения памяти, поскольку
str
указывает на несколько указателей наchar
, которые также указывают на выделенную память.for (size_t i = 0; i < n; ++i) free(str[i]); free(str);
на помощь.
Походит на Вас, Вы переместили проект от VSS до TFS, и исходный файл решения все еще связывается с VSS - необходимо снова переплести его к TFS.
Вот шаги, которые необходимо будет сделать для фиксации этого. Я принес бы выборку здесь, но это, кажется, зависит от нескольких факторов и не тривиально.
Поочередно, вот поток, который затрагивает привязку/развязывание проекта, которая могла бы применяться, если вышеупомянутое не делает.
- Adam