gpt4 book ai didi

c++ - 为什么 vector 会导致 Segmentation fault 错误?

转载 作者:行者123 更新时间:2023-11-30 01:01:38 26 4
gpt4 key购买 nike

我想从 Openssl 生成随机数。

所以。我制作了程序:

#include "openssl/rand.h"
struct randomData
{
char str[32];
}

int main()
{
std::vector<randomData> vecStr;
randomData rd;
vecStr.emplace_back(rd);

RAND_bytes((unsigned char *)vecStr[i].str, sizeof(vecStr[i].str));

std::string ss = to_hex(vecStr[i].str, sizeof(vecStr[i].str));
std::cout << "Random Nonce Hex Data : " << ss << " // Key Length : " << ss.length()<<std::endl;

return 0;
}
// [out put]
// Random Nonce Hex Data : f0f5e38e596fdb2f7cef79d3706fcbf111decaa844154295b89b90eb65925a53 // Key Length : 64

但我不想做结构。只需使用 vector 。所以,我试过了。

std::vector<char> str;
str.reserve(33);
RAND_bytes((unsigned char *)&str, sizeof(str));
std::string ss = to_hex((char*)&str, sizeof(str));
std::cout << "Random Nonce Hex Data : " << ss << " // Key Length : " << ss.length() << std::endl;

// [ output ]
// Random Nonce Hex Data : f1935de540b5a75bcaa9eab4b173abcb6a840bf83c4181ee // Key Length : 48
// Segmentation fault (core dumped)

可以看到错误日志。我搜索了“reserve”和“resize”的区别。但是那些函数导致了同样的错误。

为什么会这样??

最佳答案

首先应该是resize,而不是reserve

其次,使用 .data() 而不是强制转换为指针类型。

第三,是str.size(),不是sizeof(str)

std::vector<char> str(33);
RAND_bytes(reinterpret_cast<unsigned char*>(str.data()), str.size());
std::string ss = to_hex(str.data(), str.size());

关于c++ - 为什么 vector 会导致 Segmentation fault 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58762636/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com