1)示例1
#include <string.h>
#include <openssl/crypto.h>
int main()
{
char*p;
int i;
p=OPENSSL_malloc(4);
p=OPENSSL_remalloc(p,40);
p=OPENSSL_realloc(p,32);
for(i=0;i<32;i++)
memset(&p[i],i,1);
/* realloc时将以前的内存区清除(置乱) */
p=OPENSSL_realloc_clean(p,32,77);
p=OPENSSL_remalloc(p,40);
OPENSSL_malloc_locked(3);
OPENSSL_free(p);
return 0;
}
上述示例使用了基本的openssl内存分配和释放函数。
OPENSSL_malloc: 分配内存空间。
OPENSSL_remalloc: 重新分配内存空间。
OPENSSL_realloc_clean: 重新分配内存空间,将老的数据进行拷贝,置乱老的数据空间并释放。
OPENSSL_malloc_locked 与锁有关。
OPENSSL_free: 释放空间。
2)示例2
include <openssl/crypto.h>
#include <openssl/bio.h>
int main()
{
char*p;
BIO*b;
CRYPTO_malloc_debug_init();
CRYPTO_set_mem_debug_options(V_CRYPTO_MDEBUG_ALL);
CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_ON);
p=OPENSSL_malloc(4);
CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_OFF);
b=BIO_new_file("leak.log","w");
CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_ON);
CRYPTO_mem_leaks(b);
OPENSSL_free(p);
BIO_free(b);
return 0;
}