я получил следующий код, чтобы зашифровать строку в C++ DLLКак освободить выделенную память в C++ DLL
EXPORT WCHAR* EncryptString(WCHAR* stringToEncrypt) {
aes_context ctx;
WCHAR* in = stringToEncrypt;
WCHAR* out;
WCHAR* key = L"TestKey";
BYTE* buffEnc = (BYTE*)malloc(16);
BYTE* keyBuffEnc = (BYTE*)malloc(32);
memset(buffEnc, 0, 16);
memset(keyBuffEnc, 0, 32);
memcpy(buffEnc, in, wcslen(in) * 2);
memcpy(keyBuffEnc, key, wcslen(key) * 2);
aes_set_key(&ctx, keyBuffEnc, 256);
aes_encrypt(&ctx, buffEnc, buffEnc);
out = (WCHAR*)buffEnc;
// free(buffEnc);
// free(keyBuffEnc);
return out;
}
Моя проблема заключается в том, что я не могу освободить выделенную память, так как в противном случае результат нарушается. Интересно, как я могу освободить использованную память, не потеряв результат? У меня изменить тип возвращаемого значения?
Заранее за вашу помощь. Greets Heinz
Ваш образец кода не является стандартным C++ (поскольку 'WCHAR' не является стандартным типом, но имеет определенную системную специфику). Считаете ли вы использование 'std :: string' или' std :: wstring'? –
Вы должны дублировать данные, вместо того чтобы возвращать указатель – accfews
'out' заимствует память из buffEnc. Самой безопасной задачей было бы вернуть std :: wstring; используя buffEnc в конструкции. Освободите память, когда std :: wstring будет построена, а затем вернется. – Bathsheba