相关疑难解决方法(0)

279
推荐指数
8
解决办法
19万
查看次数

malloc()和free()如何工作?

我想知道如何mallocfree工作.

int main() {
    unsigned char *p = (unsigned char*)malloc(4*sizeof(unsigned char));
    memset(p,0,4);
    strcpy((char*)p,"abcdabcd"); // **deliberately storing 8bytes**
    cout << p;
    free(p); // Obvious Crash, but I need how it works and why crash.
    cout << p;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

如果答案在记忆水平上是深入的,如果可能的话,我将非常感激.

c c++ malloc free memory-management

263
推荐指数
9
解决办法
14万
查看次数

如何在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;
}
Run Code Online (Sandbox Code Playgroud)

我的问题是我无法释放分配的内存,否则结果会被破坏.我想知道如何在不丢失结果的情况下释放使用过的内存?我要改变返回值的类型吗?

在此先感谢您的帮助.迎接亨氏

c++ dll winapi memory-management

2
推荐指数
2
解决办法
3030
查看次数

标签 统计

c++ ×3

memory-management ×3

c ×1

dll ×1

free ×1

malloc ×1

winapi ×1