Desbordamiento de matriz COMDLG_FILTERSPEC de C++ COM.
Tengo esta función que tomará una lista de pares de cadenas y generará una matriz COMDLG_FILTERSPEC. Los pares son así: first = “Todos los tipos” segundo = “*. *”
La función funciona, sin embargo, obtengo sobrecargas de búfer como se muestra aquí:
También obtengo este bonito mensaje que me dice que tendré sobrecargas de búfer.
No tengo idea de cómo solucionar esto o por qué está sobrepasando. ¿Alguien puede ayudar?
Aquí está el código:
COMDLG_FILTERSPEC * CreateFILTERSPEC (std :: list & lt; std :: pair & lt; std :: wstring, std :: wstring & gt; & gt; _filters) {
// TODO: Causa una pérdida de memoria al eliminarla. Solucionarlo.
COMDLG_FILTERSPEC * filterSpecs = new COMDLG_FILTERSPEC [_filters.size ()];
int i = 0;
para (std :: pair & lt; std :: wstring, std :: wstring & gt; filtro: _filtros) {
PWSTR f1_p = nuevo wchar_t [filter.first.length ()];
filtro.first.copy (f1_p, filter.first.length ());
PWSTR f2_p = new wchar_t [filter.second.length ()];
filter.second.copy (f2_p, filter.second.length ());
COMDLG_FILTERSPEC fs = {f1_p, f2_p};
filterSpecs [i] = fs;
i ++;
}
return filterSpecs;
}
Cualquier ayuda es apreciada, gracias.
davy.ai
Función para crear un arreglo COMDLG_FILTERSPEC
Se ha creado una función en C++ para tomar una lista de pares de cadenas y generar un arreglo COMDLG_FILTERSPEC. Los pares están en la forma de ‘Todos los tipos’ y ‘.‘. Sin embargo, están ocurriendo sobrescrituras de búfer, lo que está causando una fuga de memoria al eliminar la función.
Código
Problema de sobrescritura de búfer
La función está causando una sobrescritura de búfer, lo que es evidente por el mensaje de error mostrado en la captura de pantalla.
Solución
Para solucionar el problema de sobrescritura de búfer, se debe definir el tamaño de las matrices de caracteres para f1_p y f2_p, ambas actualmente vacías. Esto puede hacerse agregando +1 después de filter.first.length() y filter.second.length(), para tener en cuenta el terminador nulo al final de una cadena.
Además, hay una fuga de memoria al eliminar el puntero, que se puede solucionar eliminando explícitamente los punteros antes de volver de la función.
Aquí está el fragmento de código actualizado:
Estos cambios aseguran que la función se ejecute sin problemas de sobrescritura de búfer, y que no haya fuga de memoria al eliminar.</std::wstring,></std::wstring,></std::wstring,></std::wstring,>