当我在终端上运行以下代码时,它给出了分段错误。 我正在使用boringssl库。
#include <bits/stdc++.h>
#include <openssl/evp.h>
using namespace std;
// #include <openssl/digest.h>
int main(){
EVP_MD_CTX* ctx = EVP_MD_CTX_new();
EVP_MD_CTX_init(ctx);
const EVP_MD* sha256 = EVP_sha256();
EVP_DigestInit(ctx,sha256);
char str[]="ANIKET GUPTA";
EVP_DigestUpdate(ctx,str,strlen(str));
unsigned char hash[EVP_MAX_MD_SIZE];
unsigned int* hash_size;
EVP_DigestFinal(ctx,hash,hash_size);
cout <<"SUCCESS";
EVP_MD_CTX_free(ctx);
}
我使用以下命令运行此代码:g++ -I~/src/boringssl/include sign.cpp ~/src/boringssl/build/crypto/libcrypto.a -lpthread
造成细分错误的错误是什么?
答案 0 :(得分:0)
在线
unsigned int* hash_size;
EVP_DigestFinal(ctx, hash, hash_size);
您正在使用hash_size
且未初始化,而EVP_DigestFinal()
会尝试将hash_size
结果写入未知位置,从而导致段错误。相反,您可以
unsigned int hash_size;
EVP_DigestFinal(ctx, hash, &hash_size);
您的编译器应该已经为您指出了这个问题,它通常能够检测到这样的未初始化变量。
答案 1 :(得分:0)
已解决! 我们必须malloc hash和hash_size