“Кажется, существует несоответствие между управлением исходным кодом решения …”

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 для хранения указателей на строки.

Кстати.

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 без указания с, чтобы ограничить количество символов, записанных в место назначения.

if (str[i][j] >= 'a' && str[i][j] <= 'z')

Вот для чего islower() из <ctype>.

free(str);

Этого недостаточно для освобождения памяти, поскольку str указывает на несколько указателей на char, которые также указывают на выделенную память.

for (size_t i = 0; i < n; ++i)
    free(str[i]);
free(str);

на помощь.

9
задан Community 23 May 2017 в 12:02
поделиться

1 ответ

Походит на Вас, Вы переместили проект от VSS до TFS, и исходный файл решения все еще связывается с VSS - необходимо снова переплести его к TFS.

Вот шаги, которые необходимо будет сделать для фиксации этого. Я принес бы выборку здесь, но это, кажется, зависит от нескольких факторов и не тривиально.

Поочередно, вот поток, который затрагивает привязку/развязывание проекта, которая могла бы применяться, если вышеупомянутое не делает.

- Adam

7
ответ дан 4 December 2019 в 23:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: