seriouscope, nullptr - это нулевой указатель, который ни на что не указывает. Это не ноль, и ни на какие данные он по определению не указывает.
А в документации чётко сказано, что нужно передавать указатель на существующую функцию вполне конкретного типа:
A pointer to the application-defined function of type LPTHREAD_START_ROUTINE to be executed by the thread and represents the starting address of the thread in the remote process. The function must exist in the remote process.
Василий Банников, если "подушнить" то это не совсем корректно и вводит seriouscope в заблуждение. nullptr это prvalue типа std::nullptr_t и его можно привести к нужному типу указателя, где результатом будет определенное значение адреса. По факту оно будет implementation defined и определения запрещавшего ему на что-то указывать насколько я знаю нет.
Т.к. это OS семейства windows, то там весьма вероятно будет 0. Поидее (но не совсем уверен) эту страницу виртуальной памяти у процесса система резервирует и ничего не должна разрешать, что гарантировано приводит к нарушению условия The function must exist in the remote process и access violation с потенциальным последующим крашем, что видимо и наблюдает автор вопроса.
Итого поведение для данного окружения вполне детерминированное и по сути проблема только в том, что по получившемуся адресу код в принципе не может располагаться.