当我在我的终端上运行以下代码时,它给出了分段错误。我使用的是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导致分段错误的错误是什么?
发布于 2018-12-06 23:22:23
在队伍中
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);你的编译器应该已经给出了这个问题的指示,它通常能够检测到像这样的未初始化的变量。
发布于 2018-12-06 23:26:19
解决了!我们必须使用malloc hash和hash_size
https://stackoverflow.com/questions/53650438
复制相似问题