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");
и т.д. (с разными строками в разных местах) - тогда программа не просто повиснет, а будет выводить на экран, что она делает. Это называется отладочный вывод. Так вы поймете, где программа виснет.
malloc может падать, если вы до этого память уже испортили выходами за границу массива.
Что там с выводом-то? Между каких строк падает?