'Is it safe to use a reinterpret_cast if I can guarantee the correct type was used to allocate the memory?

I am trying to make my C++ code cross platform. On Windows I am using the Windows.h header file and on macOS and Linux I use the unistd.h header file.

I am calling a function if the OS is windows which takes a char* type. The equivalent call for mac and linux takes char**. I currently have a function that takes a void* type so that I can have 1 function for both cases. I then check the operating system and reinterpret_cast to the correct type.

void DoSomething(void* thing) {

  #if defined(__APPLE__) || defined(__linux__)

  // Init thing as char**
  thing = new char*[...];
    thing[0] = new char[...];
    .
    .
    .

  UnixFunction(reinterpret_cast<char**>(thing));

  #elif defined(_WIN32)

  // Init thing as char*
  thing = new char[...];
  WindowsFunction(reinterpret_cast<char*>(thing));
  #endif
}

int main() {

  void* thing;
  DoSomething(thing);

  return 0;

}

Regardless if I should do this, is this safe or is this undefined behavior?



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source