使用memcpy时,我的RNG函数中的内存访问失败

问题描述

我在尝试从随机数组中复制元素时遇到内存访问故障。 我不知道我在做什么错,请您提前帮忙。

这是我的代码

  1 #include <TSS_API_RNG.h>
  2
  3 using namespace std;
  4
  5 // dummy rng for internal speed tests
  6 void rng(uint8_t out[],size_t len) {
  7
  8    unsigned char iv[len];
  9    size_t i,k;
 10    srand(time(NULL));
 11      for (i = 0; i < len; i++) {
 12      k = rand()%256;
 13      iv[i] = (unsigned char)k;
 14      cout << iv[i] << endl;
 15
 16      memcpy(&out[0],&iv[0],len);
 17      cout << &out[0] << endl;
 18      memset(&iv[0],0x00,len);
 19   }
 20 }
 21
 22 int main() {
 23
 24    rng(NULL,10);
 25    return 0;
 26 }

这是我尝试执行程序时发生的事情:

pi@raspBerrypi:~/projects/RNG_final $ ./DUMMY_RNG
▒
Speicherzugriffsfehler

我必须不能正确使用memcopy函数,但是我不知道如何解决此问题。为了进行测试,我想传递10个随机数,但是在memcpy的第一次迭代中失败了。循环本身可以正常工作,因此可以正确打印第一个cout值。

解决方法

Thx伙计们,根据您的建议设法解决了这个问题。

我的代码:

  1 #include <TSS_API_RNG.h>
  2
  3 using namespace std;
  4
  5 // constructor
  6 DUMMY_RNG::DUMMY_RNG()
  7   :r_len(0),r_count(0)
  8 {
  9    std::cout << "Neue Instanz" << std::endl;
 10 }
 11
 12
 13 // destructor
 14 DUMMY_RNG::~DUMMY_RNG(void)
 15 {
 16 }
 17
 18
 19 // dummy rng for internal speed tests
 20 int DUMMY_RNG::rng(uint8_t out[],size_t len) {
 21
 22    unsigned char iv[len];
 23    size_t k;
 24    srand(time(NULL));
 25      //for (i = 0; i < len; i++) {
 26      k = rand()%256;
 27      iv[0] = (unsigned char)k;
 28
 29      memcpy(&out[0],&iv[0],len);
 30      memset(&iv[0],0x00,len);
 31   //}
 32     return 1;
 33 }
 34
 35
 36 // randomize function replacement from botan rng class
 37 void DUMMY_RNG::randomize(uint8_t out[],size_t len)
 38 {
 39    r_count += 1;
 40    r_len += len;
 41
 42    rng(out,len);
 43 }