Вы можете создать новые пользовательские данные после получения указателя на тот, который вы уже создали с помощью lua_newuserdata (). Затем установите базовое значение указателя на значение базового значения первых пользовательских данных. Это должно выглядеть примерно так:
int *ud1 = lua_touserdata( L, -1 ); // Get userdata previously created
int *ud2 = lua_newuserdata( L, sizeof( int ) ); // Create new userdata
*ud2 = *ud1; // Set value of new userdata to the value of the previous userdata
// Userdata has been successfully "pushed"
assert(
*( (int*) lua_touserdata( L, -1 ) ) ==
*( (int*) lua_touserdata( L, -2 ) )
);