diff --git a/modules/core/src/opengl.cpp b/modules/core/src/opengl.cpp index 83be34f147..b7a85a61a4 100644 --- a/modules/core/src/opengl.cpp +++ b/modules/core/src/opengl.cpp @@ -1682,27 +1682,12 @@ Context& initializeContextFromGL() if(extensionSize > 0) { - char* extensions = nullptr; - - try { - extensions = new char[extensionSize]; - - status = clGetDeviceInfo(devices[j], CL_DEVICE_EXTENSIONS, extensionSize, extensions, &extensionSize); - if (status != CL_SUCCESS) - continue; - } catch(...) { - CV_Error(cv::Error::OpenCLInitError, "OpenCL: Exception thrown during device extensions gathering"); - } - - std::string devString; - - if(extensions != nullptr) { - devString = extensions; - delete[] extensions; - } - else { - CV_Error(cv::Error::OpenCLInitError, "OpenCL: Unexpected error during device extensions gathering"); - } + std::string devString(extensionSize, '\0'); + status = clGetDeviceInfo(devices[j], CL_DEVICE_EXTENSIONS, devString.size(), &devString[0], &extensionSize); + if (status != CL_SUCCESS) + continue; + if (extensionSize > 0 && devString.size() >= extensionSize) + devString.resize(extensionSize - 1); size_t oldPos = 0; size_t spacePos = devString.find(' ', oldPos); // extensions string is space delimited