char* original_key = ck_str;
. Не надо так делать. Зачем вы этот псевдоним ввели? Он указывает на все ту же память, что и ck_str. Но дальше в коде используете то ck_str, то original_key. Хорошо еще, что хоть не free() их обе. char* ck_str = (char*)malloc(strlen(k));
strcpy(ck_str, k);
Я так понял если не переполнять буфер сокета, то и гонки данных не будет?
Сокет сам выстроит дейтаграммы в очередь в своем буфере?
Сокет сам выстроит дейтаграммы в очередь в своем буфере?
Почему у некоторых не работает пока остается загадкой.. "на моей машине работает", "у меня такая же нога - а не болит". Что ваша программа-то делает? Проверяет ли она, сколько ядер у процессора, например? Скачивает ли из интернета конфиги? Может, из-за локали какие-то функции используют запятую вместо десятичной точки и какие-то числа из конфигов оказываются в 1000 раз больше и вся логика программы идет чертом. Может, у вас там data race из-за ошибки в многопоточности и по таймингам оно все портит только на процессорах определенной модели со слабыми кулерами и отключенным в биосе hyperthreading.
f (map[y][x] == '%' || map[y][x] == ' ' || map[y + 2][x] == ' ' || map[y - 2][x] == ' ' || map[y][x + 2] == ' ' || map[y][x - 2] == ' ')
это цыкл используеться чтоб в цетре комнаты ">' лесницу поставить
А по отлажывать не получаеться
printf("loop1");
и т.д. (с разными строками в разных местах) - тогда программа не просто повиснет, а будет выводить на экран, что она делает. Это называется отладочный вывод. Так вы поймете, где программа виснет.