首页 > 解决方案 > 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 );

标签: cpointersmalloc

解决方案


我决定在调用函数之前进行分配:

plaintext = (unsigned char *)malloc( sizeof(char)*ret );

推荐阅读