c - malloc c上的分段错误
问题描述
我一直在阅读其他帖子试图弄清楚这一点,但一直未能做到。我正在调用一个函数,该函数需要一个指向结果指针的指针,如下所示:
int plaintext_len = 0;
unsigned char *plaintext = NULL;
plaintext_len = token_decrypt( login_token, &plaintext );
并且token_decrypt
解密很好,如下所示:以下gcm_decrypt
函数返回明文长度并将明文文本存储在my_plaintext
.
int token_decrypt( const char *jwt_token, unsigned char **plaintext ) {
int ret = 0;
unsigned char my_plaintext[1024];
...
ret = gcm_decrypt(
(unsigned char*)token_decoded.c_str(),
ciphertext_len,
(unsigned char*)aad.c_str(),
aad_len,
(unsigned char*)tag.c_str(),
(unsigned char*)decoded_key.c_str(),
(unsigned char*)iv.c_str(),
iv_len,
my_plaintext
);
printf("my_plaintext: '%s'\n", my_plaintext ); <---- prints correctly the result.
*plaintext = (unsigned char *)malloc( sizeof(char) * ret );
memcpy( *plaintext, my_plaintext, ret );
printf("token plaintext: '%s'\n", plaintext );
return ret;
但是在执行段错误
*plaintext = (unsigned char *)malloc( sizeof(char) * ret );
解决方案
我决定在调用函数之前进行分配:
plaintext = (unsigned char *)malloc( sizeof(char)*ret );
推荐阅读
- unity3d - Unity:Mesh Renderer 似乎并不完美地适合 Edge
- regex - 使用 Perl 计算字符串中的非特殊字符
- java - 使用 Elastic Beanstalk 将文件上传到 S3 不起作用
- javascript - 如何使用画布和 JavaScript 使雪花形状旋转到其中心?
- python - 如何使用 Django 中的 FileField 在数据库中保存多个项目?
- node.js - Vue开发代理规则被忽略
- machine-learning - 试图通过回归来预测算法的运行时间
- prolog - 如何使用一系列事实限制 Prolog 中参数的值?
- python - QDataWidgetMapper 不会在所有 Windows 中更新
- node.js - 电子应用程序失败并输出神秘 - 使用 SIGSEGV 退出