diff --git a/renderdoccmd/renderdoccmd_win32.cpp b/renderdoccmd/renderdoccmd_win32.cpp index 40067f156..9ce82c580 100644 --- a/renderdoccmd/renderdoccmd_win32.cpp +++ b/renderdoccmd/renderdoccmd_win32.cpp @@ -264,18 +264,30 @@ int WINAPI wWinMain(_In_ HINSTANCE hInst, wargv = CommandLineToArgvW(GetCommandLine(), &argc); - char **argv = new char*[argc]; + std::vector argv_storage; + std::vector argv_pointers; + argv_storage.resize(argc); + argv_pointers.resize(argc); for(int i=0; i < argc; i++) { size_t len = wcslen(wargv[i]); len *= 4; // worst case, every UTF-8 character takes 4 bytes - argv[i] = new char[len + 1]; - argv[i][len] = 0; + argv_storage[i].resize(len + 1); + argv_storage[i][len] = 0; + argv_pointers[i] = &argv_storage[i][0]; - WideCharToMultiByte(CP_UTF8, 0, wargv[i], -1, &argv[i][0], (int)len+1, NULL, NULL); + WideCharToMultiByte(CP_UTF8, 0, wargv[i], -1, argv_pointers[i], (int)len+1, NULL, NULL); } + char *argv_backup[] = { "", NULL }; + char **argv = NULL; + + if(argc > 0) + argv = &argv_pointers[0]; + else + argv = argv_backup; + LocalFree(wargv); hInstance = hInst; @@ -699,15 +711,9 @@ int WINAPI wWinMain(_In_ HINSTANCE hInst, } CloseHandle(pipe); - + return 0; } - int retval = renderdoccmd(argc, argv); - - for(int i=0; i < argc; i++) - delete[] argv[i]; - delete[] argv; - - return retval; + return renderdoccmd(argc, argv); }